以下有三个类文件:
//File A.java
public class A {

public void aa() {
System.out.println("aa");
}
}//File B.java
public abstract class B extends A {
public abstract void bb();

public void aa() {
System.out.println("bbaa");
}
}//File C.java
public class C extends B {
public void bb() {
System.out.println("bb");
}

public static void main(String[] args) {
A c=new C();
c.aa();
}
}现在运行程序是,打印的是Class B的aa方法。
问题:如何在C类中调用aa方法时,执行的是Class A中的程序,而不是打印Class B的程序,不要告诉我A a=new A();a.aa();这样子,OK??谢谢!

解决方案 »

  1.   

    A c=new C();
    这样可以吗?原理是什么啊?
    学习ing
      

  2.   

    这个不可能,B类已经将A类的aa()方法重写了 ,而C类继承自B,所以不可能调用A类的aa()方法
      

  3.   

    不用覆盖,用重载可以做到调用A.aa()吧
    或者,Class B 用super构造方法 这样的Class C 内也可以调用A.aa()吧如有不妥,请指正
      

  4.   

    在CLASS A中改个方法名,然后重写个吧
      

  5.   

    C c = (C)new A();
    c.aa();
      

  6.   

    再B中添加一个方法cc(){ super.aa();}
      

  7.   

    我认为在只有在类B的aa方法中增加super.aa()才可以调用到A类中的aa方法吧!
    学习中!
      

  8.   

    java 是动态绑定的,指向谁,调用谁的方法
    而C++有静态绑定
    A *p=new C();
    p->aa();
    只要aa()不是vitual的,就肯定调用A类的aa()
    而如果是vitual的,就动态绑定了,现在指向C类对象,就调用C类对象的aa()//B类对aa()覆盖了
      

  9.   

    B将A的同名函数覆盖了么
    SUPER的话你自己写的去了,就是你的了
      

  10.   


    public class Test1 { public void aa() {

    System.out.println("aa");

    }
    }public abstract class Test2 extends Test1{ public abstract void bb(); public void aa() { System.out.println("bbaa");

    }

    public void xyz(){
    super.aa();
    }
    }public class Test3 extends Test2 { public void bb() {

    System.out.println("bb");

    } public static void main(String[] args) {

    Test3 c=new Test3();
    c.aa();
    c.xyz(); }
    }结果:
    bbaa
    aa