急:内部类的继承问题? (200分)

  • 主题发起人 主题发起人 gunwithlove
  • 开始时间 开始时间
G

gunwithlove

Unregistered / Unconfirmed
GUEST, unregistred user!
急:内部类的继承问题?
JAVA编程思想第七章(P172)问题:
/*本程序演示如何从内部类继承*/
package c07;
class Egg2
{
protected class Yolk
{
public Yolk()
{
System.out.println("Egg2.Yolk()");
}
public void f()
{
System.out.println("Egg2.Yolk.f()");
}
}
//以上定义了内部类Yolk,它有两个public方法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 //重载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()
请问它运行的顺序是怎样的?谢谢!

__________________
step by step
 
这是delphi论坛,看c我有困难。
 
看BigEgg2.main:
1、
Egg2 e2 = new BigEgg2();
构造BigEgg2时,先构造super类Egg2;
构造Egg2时,先执行类成员的定义
private Yolk y = new Yolk();
构造一个Yolk,执行Yolk的构造函数 System.out.println("Egg2.Yolk()");
执行Egg2的构造函数 System.out.println("New Egg2()");
执行BigEgg2的构造函数 insertYolk(new Yolk()),构造BigEgg2.Yolk
执行Egg2.Yolk的构造函数
执行BigEgg2.Yolk的构造函数。
2、
e2.g();
执行y.f();
y是Yolk的一个实例,执行覆盖后的f(),
System.out.println("BigEgg2.Yolk.f()");
我理解的两个原则
类的构造函数会隐式调用super类的构造函数。
Egg2 e2 = new BigEgg2(),虽然我们指定句柄e2指向一个Egg2的实例,
在调用e2的方法和成员时,系统优先调用BigEgg2中覆盖的东西,因为它实际
上是一个BigEgg2。
说Java内没有指针,但我总觉得e2的行为有点象指针,不知各位大哥是怎么看的?
 
听说是Java,我还没有学习呢:(
 
你的运行结果已经很清楚了。类的构造顺序为:
先构造基类,再下来是数据成员,最后是自己。
 
如果学习一门新语言,建议从最基本的学起,重要的是先看看书!^_^
 

Similar threads

后退
顶部