只有普通方法(不是final static private和构造器)可以是多态的,

此时f()是private的,对于子类是不可见的,也就无法overwrite,子类中的f()方法只是一个新方法,向上转型后,只能调用父类中有的方法,想调用子类独有的方法需向下转型。

image.png

对于域和静态方法


由于域不会被覆盖,即使向上转型之后访问的还是父类的域。只有普通方法才具有多态行为
image.png
image.png
同理对于静态方法,向上转型后,依然调用的是父类的方法,因为静态方法是对于类的,不是对对象的。
image.png

动态绑定·(除了static和final(private)外都是动态绑定)

Java在运行时才知道该调用哪个方法,在基类中调用的draw方法在导出类中已被overwrrte,所以在new出子对象调用父类构造器时,调用的是被overwrite后的draw方法,在此时,子类还没被初始化,所以radius为默认值0.
image.png

image.pngimage.png

协变返回类型

image.png