问一个java初始化问题,高手帮忙解答一下吧~
发布网友
发布时间:2024-10-11 01:54
我来回答
共5个回答
热心网友
时间:2024-12-13 05:32
只有普通的方法调用可以是多态的.
属性的访问操作是由编译器解析,不会有多态..程序运行的时候为Parent.x和Child.x 分配了不同的存储空间
在类Parent的构造方法中,因为多态.调用了Child的add()方法.而Child
的add()方法作用于Child.x 对Parent.x没有影响
所以p.x = 10
热心网友
时间:2024-12-13 05:33
Child没有自己的构造函数,因此继承parent的。
因为child里的x=9这个变量不是static的,因此只有当child被构造的时候才会存在。前面说了child调用的是Parent的的构造,因此child的X就不会被初始化,parent的X才会,被set成10。
new Child()以后,构造函数Parent(){add(2)}被调用,但这个add方法在Child里被重载,因此是child的add被实际调用,这样x+=y里的x就是Child的X(未被初始化的),而不是parent的,parent的x依然是10。
给你的代码增加一些同步显示,可以看到:
parent cons, initial x is:10
child add, initial x is:0
after child add, x is:2
after parent cons, x is:10
热心网友
时间:2024-12-13 05:33
我一步一步的告诉你步骤:
1,int x=10;
2,Parent();
3,add(2);这个是子类中的add方法,因为主类中的被覆盖了,当然x也是子类中的x,这个时候子类中的x=2,父类中的x=10;
4,int x=9;
要注意的是子类中的x与父类中的x同时存在,而你的对象是父类,那么所调用的x也是父类中的,假如你改成Child p=new Child();则显示的是9,原因还是在 3 。
祝你学习java旅程愉快
热心网友
时间:2024-12-13 05:34
会先执行父类的构造方法,你可以先了解一下执行顺序
热心网友
时间:2024-12-13 05:35
不是9吗?