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的實例時,產生什么輸出?
--------------------------------------------
=========================================
x =1 y =0
new B()后首先執行
int x=1;
int y;
再執行B的構造函數時會調用基類構造函數先 於是執行
public A()
{
PrintFields();
}
而A中的PrintFields方法是virtual方法且B中已經用override關鍵字實現了該方法
於是會執行子類B中的PrintFields方法 Console.WriteLine( "x={0},y={1} ",x,y);
//注意此時還沒有執行到B的構造函數 所以 y值為0
而后才執行到B的構造函數//此時 x=1 y =-1;
virtual修飾的方法為虛方法,暗示其子類最好有自己的實現
override修飾的方法為重寫方法,表示覆蓋了基類原有方法的實現
virtual修飾的方法
其子類除了override 還可用new來修飾