在本片開始介紹這兩個方法之前,我們需要先了解多型這一概念。
。那麼,如果直接在c#中寫下兩個相同的方法名時,會發生什麼事情呢?
提示的意思為子類方法與父類方法重名了,這時我們有兩種方法解決:第一種是按照它的提示給子類修飾符後加new,這種解決方法我們先不做**;第二種解決方法,則是改名,但這樣就無法體現多型的特點;第三種,則是我今天要講的:虛方法。
虛方法:把乙個基類函式宣告為virtual,就可以在任何派生類中重寫該函式,在派生類中重寫另乙個函式時,要使用override關鍵字顯示宣告。我們在子類裡重寫虛方法後,不管在**呼叫都是呼叫重寫以後的方法。
例子:
using system;
}public class person
set
}int _age;
public int age
set
}char _gender;
public char gender
set
}public virtual void show()//父類方法使用虛方法
}public class teacher:person}}
輸出結果:
虛方法的注意事項:
-虛方法不可加static;
-虛方法重寫與基類的方法名必須一致;
-virtual不能與private一起使用。
虛方法的作用:虛方法可以很好的表現多型,從上面的例子來看,因為重寫的作用,乙個show方法可以表現多個結果。
講完了虛方法,接下來我們來講一下抽象方法。
抽象方法:在物件導向程式設計語言中抽象方法指一些只有方法宣告,而沒有具體方法體的方法。抽象方法一般存在於抽象類或介面中。
抽象方法的語法:在抽象類中的修飾符後加abstract,表示抽象類;而在抽象類中的方法的修飾符後加abstract,表示抽象方法。在派生方法中,同樣也需要在修飾符後寫override表示重寫基類的方法。
例子:
using system;
namespace _2.抽象方法與抽象類
}public abstract class person
set
}private char _gender;
public char gender
set
}private int _age;
public int age
set
}public abstract void shout();//抽象方法中無方法體且必須放置在抽象類中
}public class giao:person}}
輸出結果:
注意事項:
-抽象類只能用作基類,無法例項化;
-抽象類的子類必須實現(通過重寫的方式)抽象方法體;
-抽象方法無方法體;
-抽象成員只存在於抽象類中;
-抽象類可以有非抽象成員。
抽象方法的作用:同樣是為了實現多型,並且是當基類的方法需要用於多處,但其並不需要方法體時。比如,我定義了乙個animal類,想要通過它讓不同的動物發出不同的叫聲,而我顯然是不需要知道animal這個類的叫聲的,此時就可以用抽象方法來完成。
抽象方法與虛方法
在物件導向程式設計語言中抽象方法指一些只有方法宣告,沒有具體方法體的方法。抽象方法一般存在於抽象類或介面中。在c 中,抽象方法具有以下特性 抽象方法是隱式的virtual方法 只允許在抽象類中使用抽象方法宣告 因為抽象方法不提供實現,所以沒有方法體 方法宣告只是以乙個分號結束,並且在簽名後沒有大括號...
虛方法與抽象方法
虛方法 virtual,虛方法給父類提供了一種預設的實現,子類可以使用override重寫虛方法,虛方法不能出現在密封類 sealed 中。抽象類,不能被例項化,但可以例項化其子類的物件,抽象方法必須出現在抽象類中,抽象方法必須在子類中重寫。子類繼承抽象類,必須重寫抽象類中所有的抽象方法 除非子類也...
虛方法與抽象方法
虛方法 1 virtual方法表示此方法可以被重寫,也就是說這個方法具有多型.父類中的方法是通用方法,可以在子類中重寫以重新規定方法邏輯.2 virtual方法可以直接使用,和普通方法一樣 3 不是必須重寫的.子類可以使用base.方法 的方式呼叫,無論有沒有在子類使用override去重寫 vir...