这个帖子原来是JAVA版的 我感觉有意思转过来的 已经有人发了回答帖子 大家有兴趣可以看看
感谢Nicegirl
有能力的请解释哈!(可以把解释的内容写到语句的后面)
package ConsoleApplication1;
/**
* Class1 的摘要说明。
*/
class Egg
{
private Yolk y = new Yolk( );//四、构造内部类Egg.Yolk对象、调用其构造方法
protected class Yolk
{
public Yolk() { //十一、第二遍执行,打印Egg.Yolk(),返回BigEgg.Yolk
System.out.println( "Egg.Yolk()" ); //五、OK,无成员变量,执行方法体,打印Egg.Yolk()
} //六、返回Egg构造方法
public void f() { //十七、到这里打印Egg.Yolk().f();OK,返回main方法,执行完毕
System.out.println( "Egg.Yolk().f()" );
}
}
public Egg() { //三、执行构造方法体前初始化Egg类成员变量
System.out.println( "new Egg()" ); //七、执行方法体,打印new Egg(),父类构造方法执行完毕,返回子类BigEgg构造方法
}
public void insertYolk( Yolk yy ) { //十三、到这里了,赋下值,其实这步应该在子类中执行,只是子类中没有显式的写出继承的方法,
y = yy; //此处y是子类中的BigEgg.Yolk的引用变量,执行完毕,返回BigEgg()
}
public void g() { //十六、这里其实也是在子类中隐式存在的,注意,这里的BigEgg.Yolk类型的y只能通过继承的方法访问,因为继承的y成员变量
//是私有的
y.f(); //十七、这里调用的是BigEgg.Yolk的重写的f()方法
}
}
public class BigEgg extends Egg
{
public class Yolk extends Egg.Yolk
{
public Yolk() { //十、此类BigEgg.Yolk又是派生类,调用父类Egg.Yolk的构造方法
System.out.println( "BigEgg.Yolk()" ); //十二、执行方法体、打印BigEgg.Yolk(),返回BigEgg方法后继续执行insertYolk
//注意:这里方法被重写
}
public void f() {
System.out.println( "BigEgg.Yolk().f()" ); //十八、打印BigEgg.Yolk().f(),返回main方法,程序执行完毕
}
}
public BigEgg() { //二、发现是派生类,所以先调用父类构造方法
insertYolk( new Yolk() ); //八、执行子类方法体、调用已继承的父类方法insertYolk,然后传参,发现参数是构造器,调用构造方法
//九、构造内部类BigEgg.Yolk的对象,调用BigEgg.Yolk构造方法
} //十四、方法执行完毕,返回main函数
public static void main( String[] args)
{
Egg e = new BigEgg(); //一、类加载完毕,无静态成员变量,首先执行入口方法main,然后执行该语句
e.g(); //十五、调用已继承的方法g(),打印Egg.Yolk().f()
}
}
请复制到。NET2003下观看
此号自封于2006年11月30日