| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 741 人关注过本帖
标题:大家来讨论一下执行的流程
取消只看楼主 加入收藏
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
收藏
 问题点数:0 回复次数:4 
大家来讨论一下执行的流程
这个程序是一个JAVA程序(我从JAVA版看到的哈)
但是你在J#下可以随便跑的(直接COPY全体覆盖在CLASS1里就行)
我看不懂
不过JAVA c#很相似的
大家可以执行以下看看输出结果
很有意思
顺便讨论以下为什么有这个结果


class Egg {
protected class Yolk {
public Yolk() { System.out.println( "Egg.Yolk()" ); }
public void f() { System.out.println( "Egg.Yolk().f()" ); }
}
private Yolk y = new Yolk( );
public Egg() { System.out.println( "new Egg()" ); }
public void insertYolk( Yolk yy ) { y = yy; }
public void g() { y.f(); }
}

public class BigEgg extends Egg {
public class Yolk extends Egg.Yolk {
public Yolk() { System.out.println( "BigEgg.Yolk()" ); }
public void f() { System.out.println( "BigEgg.Yolk().f()" ); }
}
public BigEgg() { insertYolk( new Yolk() ); }
public static void main( String[] args) {
Egg e = new BigEgg();
e.g();
}
}

[此贴子已经被作者于2006-8-18 14:35:21编辑过]

搜索更多相关主题的帖子: 流程 
2006-08-18 14:34
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
收藏
得分:0 

我在.net下跑了后的结果是

Egg.Yolk()
new Egg()
Egg.Yolk()
BigEgg.Yolk()
BigEgg.Yolk().f()

不过还没弄明白
谁来解释解释


不过可以用F11单步执行看
很有意思啊


此号自封于2006年11月30日
2006-08-18 14:34
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
收藏
得分:0 
以下是引用xxxxx52在2006-8-18 17:07:21的发言:

哈哈 是不是java区没人和你讨论阿

这个实在是。。。。

您说的太对了...


此号自封于2006年11月30日
2006-08-21 09:12
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
收藏
得分:0 
以下是引用live41在2006-8-21 9:27:36的发言:

为什么 -> 要讨论
用不到 -> 实际编程不会这么来用
我不会

俺错了
请给俺个机会说俺错了


此号自封于2006年11月30日
2006-08-21 09:54
noshow
Rank: 2
等 级:新手上路
威 望:4
帖 子:1127
专家分:0
注 册:2006-4-21
收藏
得分:0 

这个帖子原来是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日
2006-08-22 09:13
快速回复:大家来讨论一下执行的流程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026210 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved