RT .. 代码如下.class Egg2
{
protected class Yolk
{
public Yolk()
{
System.out.println("Egg2.Yolk()");
}
public void f()
{
System.out.println("Egg2.Yolk.f()");
}
}
private Yolk y = new Yolk();
public Egg2()
{
System.out.println("New Egg2()");
}
public void insertYolk(Yolk yy)
{
y = yy;
}
public void g()
{
y.f();
}
}public class BigEgg2 extends Egg2
{
public class Yolk extends Egg2.Yolk
{
public Yolk()
{
System.out.println("BigEgg2.Yolk()");
}
public void f()
{
System.out.println("BigEgg2.Yolk.f()");
}
}
public BigEgg2()
{
insertYolk(new Yolk());
}
public static void main(String[] args)
{
Egg2 e2 = new BigEgg2();
e2.g();
}
}代码编译后执行结果:
Egg2.Yolk()
New Egg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()但我对这个结果不解.按照我的理解,执行顺序应该如下才对:
首先mian方法,因为Egg2 e2 = new BigEgg2();所以调用BigEgg2类.
因为BigEgg2 extends Egg2,所以会调用Egg2类的构造函数.所以应该输出:New Egg2();
然后返回回来调用 BigEgg2类的构造函数,因为insertYolk(new Yolk());所以调用Yolk类,
因为Yolk extends Egg2.Yolk 所以调用Egg2类里的Yolk内部类的构造方法,所以应该输出:Egg2.Yolk()
返回来执行y = yy;
然后因为mian方法里的e2.g();所以调用Egg2类里的g()方法,因为y.f();所以应该输出BigEgg2.Yolk.f()所以我的执行结果是:
New Egg2()
Egg2.Yolk()
BigEgg2.Yolk.f()请问我是那里理解有错? 谢谢.
{
protected class Yolk
{
public Yolk()
{
System.out.println("Egg2.Yolk()");
}
public void f()
{
System.out.println("Egg2.Yolk.f()");
}
}
private Yolk y = new Yolk();
public Egg2()
{
System.out.println("New Egg2()");
}
public void insertYolk(Yolk yy)
{
y = yy;
}
public void g()
{
y.f();
}
}public class BigEgg2 extends Egg2
{
public class Yolk extends Egg2.Yolk
{
public Yolk()
{
System.out.println("BigEgg2.Yolk()");
}
public void f()
{
System.out.println("BigEgg2.Yolk.f()");
}
}
public BigEgg2()
{
insertYolk(new Yolk());
}
public static void main(String[] args)
{
Egg2 e2 = new BigEgg2();
e2.g();
}
}代码编译后执行结果:
Egg2.Yolk()
New Egg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()但我对这个结果不解.按照我的理解,执行顺序应该如下才对:
首先mian方法,因为Egg2 e2 = new BigEgg2();所以调用BigEgg2类.
因为BigEgg2 extends Egg2,所以会调用Egg2类的构造函数.所以应该输出:New Egg2();
然后返回回来调用 BigEgg2类的构造函数,因为insertYolk(new Yolk());所以调用Yolk类,
因为Yolk extends Egg2.Yolk 所以调用Egg2类里的Yolk内部类的构造方法,所以应该输出:Egg2.Yolk()
返回来执行y = yy;
然后因为mian方法里的e2.g();所以调用Egg2类里的g()方法,因为y.f();所以应该输出BigEgg2.Yolk.f()所以我的执行结果是:
New Egg2()
Egg2.Yolk()
BigEgg2.Yolk.f()请问我是那里理解有错? 谢谢.
解决方案 »
- 求一个java写的聊天程序,命令行的就行。
- java程序运行与环境变量的问题
- 各位在使用myeclipse开发hibernate时,对ORACLE的主键是怎么控制 的
- 问一个异常处理的问题
- 关于Calendar的问题
- 在Applet中连接Oracle数据库
- 关于System.in.read()输入问题
- 如何批量编译一个目录下的.java文件?
- 如何用COM实现把一个文件从CLIENT端传送到SERVER端,保存在SERVER本地。
- 求助从SqlServer中读取的JTable,在frame中显示不出来
- 那位说下CSDN这几天在搞啥哦?
- 请问:在UltraEdit里面怎么才能让运行完的结果显示在dos窗口
执行顺序如下:
(1)Egg2 e2 = new BigEgg2();
由于BigEgg2 继承Egg2,因此在执行BigEgg2构造函数时,首先执行父类Egg2的成员变量初始化及构造函数的剩余部分;
因此是 <1>private Yolk y = new Yolk();也就是System.out.println("BigEgg2.Yolk()");
<2>System.out.println("New Egg2()");
(2)<1>然后执行derived(衍生)类 BigEgg2 的 内部类 Yolk 的构造函数,又因为Yolk是继承自 Egg2的 Yolk,因此先执行 Egg2 的Yolk的构造函数,即System.out.println("Egg2.Yolk()");
(3)最后执行e2.g();因此结果为:
Egg2.Yolk()
New Egg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()
private Yolk y = new Yolk();会执行.
Thinking in java 2 中所给的代码结果没有问题:
执行顺序如下:
(1)Egg2 e2 = new BigEgg2();
由于BigEgg2 继承Egg2,因此在执行BigEgg2构造函数时,首先执行父类Egg2的成员变量初始化及构造函数的剩余部分;
因此是 <1>private Yolk y = new Yolk();也就是System.out.println("Egg2.Yolk()");
<2>System.out.println("New Egg2()");
(2)<1>然后执行derived(衍生)类 BigEgg2 的 内部类 Yolk 的构造函数,又因为Yolk是继承自 Egg2的 Yolk,因此先执行 Egg2 的Yolk的构造函数,即System.out.println("Egg2.Yolk()");然后执行BigEgg2 的内部类 Yolk 的构造函数,即System.out.println("BigEgg2.Yolk()");
(3)最后执行e2.g();因此结果为:
Egg2.Yolk()
New Egg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()