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

Java构造的疑惑
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,求解啊!!!!
------最佳解决方案--------------------
引用:
引用:http://www.ticmy.com/?p=302

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


是对象还没有构建完整,但对象是存在了的

创建一个对象,第一件事就是给对象分配内存,分配了内存就表示对象存在了,分配内存用来干嘛?就是来存放实例的字段的(有些是编译器自动生成的,有些是程序里写的),而方法的字节码在加载class文件的时候就已经存在了
------其他解决方案--------------------
http://www.ticmy.com/?p=302

多态
------其他解决方案--------------------
引用:
http://www.ticmy.com/?p=302

多态

在A对象构造方法执行到this.x()的时候B的构造都还没有执行,也就是说B对象还不存在,怎么多态了?
------其他解决方案--------------------
在这里A没有被实例化吧,你看看是不是?
------其他解决方案--------------------
引用:
引用:引用:http://www.ticmy.com/?p=302

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

是对象还没有构建完整,但对象是存在了的

创建一个对象,第一件事就是给对象分配内存,分配了内存就表示对象存在了,……


对,是多态哈,我刚开始因为new的是A, 既然是 new B ,不管指向的是A,还是B , 方法都被重写  了
------其他解决方案--------------------
方法被override了,所以,调用的是override以后的方法。