在子类中对实例成员函数和实例成员属性的重新实现称为重写(override),对静态成员函数和静态成员属性的重新实现则称为重定义(redef)。
对于静态函数,子类中可以重定义父类中的同名非抽象静态函数,即在子类中为父类中的某个静态函数定义新的实现。重定义时,要求子类中的同名静态函数使用 redef修饰,其中 redef是可选的。请见下述示例。
1 | package StaticRedef |
上述程序的执行结果为:
1 | 180 |
🚩第3 ~ 7行:Polygon为多边形类。其中,internalAnglesSum()为静态成员函数。其假设多边形由三条边组成,返回内角和180度。
🚩第9 ~ 13行:从Polygon继承,定义子类Hexagon(六边形)。
🚩第10 ~ 12行:重定义redef父类的静态成员函数internalAnglesSum()。 其中,关键字redef可以省略。
🚩第16行:Polygon.internalAnglesSum()执行的是Polygon类型的静态成员函数,请参见执行结果第1行。
🚩第17行:Hexagon.internalAnglesSum()执行的是Hexagon类型的静态成员函数,请参见执行结果第2行。
静态属性,则是伪装成静态数据成员的静态成员函数,其重定义方法和过程类似。