多态让世界更精彩。
- ObjC 子类实现父类一样的成员方法就是重写,不需要额外修饰符。
- Java使用注解重写父类函数@Override.
- C#/Kotlin 提供override关键字表示重写基类函数, Kotlin 额外要求父类对应函数用 open 修饰(可以被重写)。对于Kotlin,如果是抽象类或者interface,抽象方法不需要用open修饰,继承它的类依然需要用override修饰重写的函数。
- Python和JS不需要加额外注解或修饰符,只要重新定义父类同名方法即可。
- C++11引入了override关键字(当然C#早就有),指示此函数覆盖基类成员函数的代码,好处是请编译器检查它真的覆盖了基类代码,而不是写错了。
- C++11引入了final说明符,代表类或者成员函数不可被重写。
- 仓颉 成员函数必须用open修饰才可以被子类重写,子类不可以重写父类的构造函数或private函数,可以重写protected或public成员函数。子类重写函数可以不加override修饰符。
- 对父类静态成员函数的重写,被称为"重定义",为了更清晰可以加上 redef 修饰符。
