日期:2014-05-20  浏览次数:20775 次

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.被重写方法() 即可!

------解决方案--------------------
对的,用super 正解