方法重載
方法重載:構造函數(shù)就屬于特殊的方法重載
?方法重載:是指同一個類中相同方法的不同行為
?方法重載的特點:
?1.方法名必須相同
?2.參數(shù)列表必須不相同(這里的不相同是指參數(shù)類型凭需,參數(shù)個數(shù)以及參數(shù)順序)
?3.在有相同參數(shù)列表個數(shù)的前提下,函數(shù)方法返回值不作為判斷方法是否重載的依據(jù)
class Math
{
public? int sum(int a,int b)
{
return a + b;
}
public float sum(int a, float b)
{
return a + b;
}
public float sum(float a, float b)
{
return a + b;
}
public float sum(float a, int b)//不同參數(shù)類型的順序也可以作為方法重載的依據(jù)
{
return a + b;
}
}
在調(diào)用這些方法時肝匆,只要將參數(shù)寫成那種方法的參數(shù)列表就可以了
方法的重寫
?方法的重寫:是指在繼承關系中不同類之間的比較和研究
?第一個關鍵字:virtual(虛擬的)
?用virtual修飾的方法稱之為虛方法
?virtual一般情況下和override成對出現(xiàn)
?如果子類重寫了override粒蜈,則父類必須擁有virtual修飾的方法
?反過來則不一定成立,因為我們還有方法覆蓋
第二個關鍵字:override(重寫)
?為什么要使用方法重寫呢
?1.使用虛方法其實就是對目前的程序不滿意旗国,暫時方法功能是實現(xiàn)了的枯怖,但是不夠完美,希望后面的程序員通過重寫父類方法的方式能曾,進行功能上的優(yōu)化
?2.可以通過繼承系統(tǒng)提供的類度硝,去修改系統(tǒng)類中提供的虛方法
?方法重寫需要注意的地方
?1.不能重寫父類中有sealed修飾的方法
?2.不能重寫父類中用static修飾的方法
?3.如果父類中存在abstract方法,子類必須重寫
class Animal//動物類有一個行為(方法)就是叫
{
public virtual void jiao()//使用虛方法實現(xiàn)叫這個方法寿冕,但是這個方法不夠完美蕊程,需要子類去調(diào)用重寫
{
Console.WriteLine ("叫");
}
}
class Cat:Animal//子類繼承父類
{
public override void jiao()//子類重寫父類方法
{
Console.WriteLine ("貓叫");
}
}
class Laohu:Animal
{
public override void jiao()//子類重寫父類方法
{
Console.WriteLine ("老虎叫");
}
}
class Lion:Animal
{
public override void jiao()//子類重寫父類方法
{
Console.WriteLine ("獅子叫");
}
}
這就體現(xiàn)了面向?qū)ο笾卸鄳B(tài)。
密封類
?密封類:俗稱斷子絕孫類....
?如果我們的類是密封類驼唱,那么就意味著不能有任何派生類藻茂,但是密封類可以擁有父類
?C#中密封類用sealed關鍵字,sealed可以將類或者方法聲明為密封類或者密封方法玫恳,
?對于密封類來說捌治,不能繼承該密封類。
?對于密封類來說纽窟,不能重寫該密封方法
?密封類不能使用protected肖油,訪問修飾符
?密封類不能使用virtual
?密封類的不可繼承性,所以密封類不能聲明為抽象的臂港,即sealed關鍵字不能和abstract共同使用
?如果用sealed修飾方法森枪,必須要遵循一個條件:這個類要有父類视搏,并且重寫了父類的某一個虛方法才可以用sealed修飾,否則是絕對不行
密封類的作用就是防止外界修改到本類县袱,破壞類的內(nèi)部構造浑娜。
class A//創(chuàng)建父類A
{
public virtual void SayHi(){}//父類A中有虛方法
}
sealed class B:A//父類滿足有虛方法這個條件,可以用sealed修飾
{
public override void SayHi (){}//重寫了父類的虛方法
}
class C:A
{
public sealed override void SayHi (){}
}
class E:C
{
public override void SayHi (){}//這樣的寫法是錯誤的式散,因為在C類中這個方法是用sealed修飾的筋遭,是密封方法所以無法被重寫,編譯不能通過
}
class D:A//其他類繼承A這個父類與B這個密封類沒有關系
{
public override void SayHi(){}
}