多态的缺陷
缺陷一:覆盖私有方法
代码:
原因:
可能我们期望的是输出:public f()
由于private被自动认为是final方法,且对导出的类是屏蔽的。因此,Derived类中f()方法是一个全新的方法。
结论:
只有非private方法才可以被覆盖。但是还需密切注视private方法,虽然编译器不暴错,但未必按照我们的想法执行。在导出类中,对基类中private方法,最好不要采用不同的名字。
缺陷二:域
代码:
原因:
当Sub对象转为Super引用时候,任何域访问操作都将由编译器解析,因此不是多态。
缺陷三:静态方法
代码:
结论:
静态方法中,多态无效。