如果用C# 考慮的話,結果應該是1
多態的時候,每個對象真正的是什麽類型是看聲明的時候
ref2 的類型是B,所以調用Class B 的方法g()就是1
ref1 的類型是A,所以調用Class A 的方法g()就是3
如果是C#的语法,结果就象釉子男说的那样,不过
在Java中就不一样了
除了使用关键字final标明的方法外,Java所有的方法都使用后联编,也就是说java中的方法默认都是相当于C#中的虚方法,
因为虚方法使用后联编,它执行的方法是靠运行时的类型决定的.
在java中结果应该是2吧
不好意思没注意看 ,其实应该都是1,如果在 c类中也加上public int g() {
return f();
} 方法的话才应该都是2
如果改成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吧