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,求解啊!!!!
------最佳解决方案--------------------------------------------------------
是对象还没有构建完整,但对象是存在了的
创建一个对象,第一件事就是给对象分配内存,分配了内存就表示对象存在了,分配内存用来干嘛?就是来存放实例的字段的(有些是编译器自动生成的,有些是程序里写的),而方法的字节码在加载class文件的时候就已经存在了
------其他解决方案--------------------------------------------------------
http://www.ticmy.com/?p=302
多态
------其他解决方案--------------------------------------------------------
在A对象构造方法执行到this.x()的时候B的构造都还没有执行,也就是说B对象还不存在,怎么多态了?
------其他解决方案--------------------------------------------------------
在这里A没有被实例化吧,你看看是不是?
------其他解决方案--------------------------------------------------------
对,是多态哈,我刚开始因为new的是A, 既然是 new B ,不管指向的是A,还是B , 方法都被重写 了
------其他解决方案--------------------------------------------------------
方法被override了,所以,调用的是override以后的方法。