public class A {
public A(){
this.xx();
}
public void xx(){
System.out.println("Object A x method");
}
public static void main(String[] args) {
B b = new B();
}
}
class B extends A { public void xx() {
System.out.println("Object B x method");
}
}
构造子类对象的时候会先构造父类对象,也就是说A对象会先产生,那么在A对象中的this.xx()方法应该是打印Object A x method,但是为什么会打印Object B x method,求解啊!!!!

解决方案 »

  1.   

    http://www.ticmy.com/?p=302多态
      

  2.   

    在A对象构造方法执行到this.x()的时候B的构造都还没有执行,也就是说B对象还不存在,怎么多态了?
      

  3.   


    是对象还没有构建完整,但对象是存在了的创建一个对象,第一件事就是给对象分配内存,分配了内存就表示对象存在了,分配内存用来干嘛?就是来存放实例的字段的(有些是编译器自动生成的,有些是程序里写的),而方法的字节码在加载class文件的时候就已经存在了
      

  4.   


    对,是多态哈,我刚开始因为new的是A, 既然是 new B ,不管指向的是A,还是B , 方法都被重写  了
      

  5.   

    方法被override了,所以,调用的是override以后的方法。