Java中 通过子类如何调用父类已经被重写的方法
阅读
class A{
void a(){
System.out.println("parent'a()");
}
}
class AA extends A{
void a(){
System.out.println("child'a()");
}
}
public static void main(String[] agrs){
AA aa = new AA();
aa.a();
A a = (A)aa;
a.a();
}
这两种打印出来的结果都是一样的,怎么才能调用A中的a方法,在不改变 A 和AA的方法的情况下。
------解决方案--------------------
A a = (A)aa;
你的这个写法其实就是多态写法,运行的时候,还是AA,因为你重写的父类的方法,想调用父类的方法,你只有直接去new父类A a = new A();
------解决方案--------------------
AA aa = new AA();
既然你构造的是AA,那么就别再想着A了。
------解决方案--------------------
- Java code
class AA extends A{ void a(){ System.out.println("child'a()"); } void sa(){ new A().a(); } }
------解决方案--------------------
想要调用A中的那个方法,必须要有那个对象的实例。A a = (A)aa;这样写,那个真正的对象还是AA,所以它就会调用AA中的那个方法。
------解决方案--------------------
你向上转型的时候,其实调用的方法是被子类覆写了的方法,也就是多态,你可以new 子类对象,如果用super.方法(),就可以了哈。
------解决方案--------------------
反射?
------解决方案--------------------
子类调用父类中被重写过的方法,用super.被重写方法() 即可!
------解决方案--------------------
------解决方案--------------------
对的,用super 正解
阅读
上一篇:很奇怪的一个有关问题! 下一篇:返回列表