标题: 一个关于继承和多态的问题(提问篇)
最新评论:[添加评论]
1. jiezhi [未注册用户] 2004-12-28 08:22
这是java的代码啊
2. 天下白 2004-12-28 08:43
结果应该是一。
属于动态连编那种情况吧。
3. 柚子男 [未注册用户] 2004-12-28 08:47
如果用C# 考慮的話,結果應該是1
多態的時候,每個對象真正的是什麽類型是看聲明的時候
ref2 的類型是B,所以調用Class B 的方法g()就是1
ref1 的類型是A,所以調用Class A 的方法g()就是3
4. wayfarer 2004-12-28 09:00
我同意柚子男的看法。
5. umlchina 2004-12-28 09:42
如果是C#的语法,结果就象釉子男说的那样,不过
在Java中就不一样了
除了使用关键字final标明的方法外,Java所有的方法都使用后联编,也就是说java中的方法默认都是相当于C#中的虚方法,
因为虚方法使用后联编,它执行的方法是靠运行时的类型决定的.
在java中结果应该是2吧
6. umlchian 2004-12-28 10:03
不好意思没注意看 ,其实应该都是1,如果在 c类中也加上public int g() {
return f();
} 方法的话才应该都是2
7. 纯爷们 2004-12-28 10:29
如果改成C#代码的话,执行效果当然是1。但是你在方法中并没有override关键字啊,如果加上override
class A
{
public virtual int f()
{
return 0;
}
public virtual int g()
{
return 3;
}
}
class B : A
{
public override int f()
{
return 1;
}
public override int g()
{
return f();
}
}
class C : B
{
public override int f()
{
return 2;
}
}
执行效果应该是2吧
8. dcf [未注册用户] 2007-09-08 12:51
运行一下就知道了:都是 1
添加评论 | 返回随笔
返回顶部 | 返回首页