以下有三个类文件:
//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??谢谢!
//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??谢谢!
这样可以吗?原理是什么啊?
学习ing
或者,Class B 用super构造方法 这样的Class C 内也可以调用A.aa()吧如有不妥,请指正
c.aa();
学习中!
而C++有静态绑定
A *p=new C();
p->aa();
只要aa()不是vitual的,就肯定调用A类的aa()
而如果是vitual的,就动态绑定了,现在指向C类对象,就调用C类对象的aa()//B类对aa()覆盖了
SUPER的话你自己写的去了,就是你的了
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