Java的方法重写覆盖问题

请问这个注释不是说不可以调用子类B的方法吗?为什么输出的是爱,不是我啊?

img

个人觉得有点误导你的思路了,可以抽丝剥茧。你可以这么理解52行,你的编译期是在去A里找方法。但实际上运行时它会去B中找。此时你b没有这个方法(如果b有这个方法会先用b),b又继承于a。所以它会去a找这个方法。在A的show中你调用了show2。所以它调用的是本类的。除非你创建b的对象并调用。

它的意思是,a只能调用a拥有的方法,如果调用b有而a没有的方法就会编译错误

假如b还有一个方法 show3
但是这个方法在a类没有,那么虽然你初始化的时候是new B(),但是仍然无法调用show3这个方法
注释说的是这个意思

1.a虽然赋值给A类型,但它实际上是B类型的对象实例,所以调用的是b的方法。
2.注释说的是A不能调用B中没有的方法