问题:
A 为父类,B为子类,都有一个m()方法,
B b=new B();
((A)b).m();
这样为什么还是调用的B类的方法呢
是不是调用父类覆盖方法只能用SUPER呢
还有,事例化一个子类对象后怎么调用父类方法呢
才学,知道的请说下
答案:
B b=new B(); 这种方式,实际上是实例化了子类的对象,注意:内存中还是子类对象。
((A)b).m(); 表面上看起来是父类对象了,但是由于内存中是子类对象,所以调用的还是子类方法。
A b=new B();
b.m();
这种方法和你写的实际是一个效果,虽然上溯造型到了父类,由于子类重写了父类的方法,调用的还是子类的方法(也就是所:方法的实现,最后是在子类中实现的)。
所以,总结如下:
如果子类没有重写父类的方法,调用父类的方法的时候,实际上是去父类的内存中实现,可以调用父类方法。
如果子类重写了父类的方法,那么,你虽然上溯造型到了父类,由于内存还是子类,该方法的实现还是在子类,所以用实例化的对象是调用不到父类的,这种情况下,只能用super关键字。
用static的情况不讨论的情况下不讨论是这样的,不知道到您是否不满意,不满意的话可以发消息继续讨论。