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了。
[解决办法]
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.被重写方法() 即可!
[解决办法]