黑马程序员技术交流社区
标题:
帮忙分析下这个小程序
[打印本页]
作者:
杨文宇
时间:
2012-7-25 11:31
标题:
帮忙分析下这个小程序
本帖最后由 杨文宇 于 2012-7-25 11:45 编辑
class X {
Y b = new Y();
X() {
System.out.print("X");
}
}
class Y {
Y() {
System.out.print("Y");
}
}
class Z extends X {
Y y = new Y();
Z() {
System.out.print("Z");
}
public static void main(String[] args) {
new Z();//为什么输出的结果是YXYZ?
}
}
作者:
乐峰
时间:
2012-7-25 11:40
本帖最后由 聂峰 于 2012-7-25 11:46 编辑
class X
{
Y b = new Y();//第3步,先初始化类中的成员变量
X()//第5步,调用构造方法,打印了X
{
System.out.print("X");
}
}
class Y
{
Y()
{
System.out.print("Y");//第4步,被new X()调用,打印了Y //第7步,被new Z()调用,打印了Y
}
}
public class Z extends X
{
Y y = new Y();//第6步,调用super()结束后,初始化本类变量
Z()
{
System.out.print("Z");//第8步,执行构造方法,打印了Z
}
public static void main(String[] args)//第1步,main函数入口
{
new Z();//第2步,初始化 Z 对象,调用父类构造方法
}
}
输出结果是:YXYZ
作者:
杨文宇
时间:
2012-7-25 11:48
聂峰 发表于 2012-7-25 11:40
class X
{
明白了:handshake
作者:
李菁
时间:
2012-7-25 11:50
class X {
Y b = new Y();
实例化Y,走Y的无参构造方法,输出y
X() {
System.out.print("X");
输出x
}
}
class Y {
Y() {
System.out.print("Y");
}
}
class Z extends X {
这个地方隐式的调用了super(),所以要输出父类x输出的内容
Y y = new Y();
实例化Y,走Y的无参构造方法
Z() {
System.out.print("Z");
输出z
}
public static void main(String[] args) {
new Z();//为什么输出的结果是YXYZ?
这就是为什么实例化Z这个类,输出的结果是YXYZ
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2