using System;
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B()
{
y=-1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}",x,y);
}
當使用new B()建立B的實例時,產生什麼輸出?ide
答:X=1,Y=0;x= 1 y = -1繼承
緣由:流程是這樣的:類B繼承了類A,,,並且重寫了A中的方法PrintFields
當程序實例化B時,,由於繼承關係,,B會先調用其父類的構造方法,,而A的構造中又調用 了 PrintFields 在A中 printFields是虛方法,,因此會調用B中的重寫 當調用 PrintFields時 B的構造還未執行,因此y=0而不是-1.因此輸出結果是x=1,y=0 若是 B b=new B();b.PrintFields();那麼輸出結果就是x=1,y=-1。it