容易混淆是必須的,都是與繼承有關系,並且涉及到override的使用
一、Virtual方法(虛方法)
virtual 關鍵字用於在基類中修飾方法。virtual的使用會有兩種情況:
情況1:在基類中定義了virtual方法,但在派生類中沒有重寫該虛方法。那么在對派生類實例的調用中,該虛方法使用的是基類定義的方法。
情況2:在基類中定義了virtual方法,然后在派生類中使用override重寫該方法。那么在對派生類實例的調用中,該虛方法使用的是派生重寫的方法。
二、Abstract方法(抽象方法)
abstract關鍵字只能用在抽象類中修飾方法,並且沒有具體的實現。抽象方法的實現必須在派生類中使用override關鍵字來實現。
接口和抽象類最本質的區別:抽象類是一個不完全的類,是對對象的抽象,而接口是一種行為規范。
三、關鍵字
Static:當一個方法被聲明為Static時,這個方法是一個靜態方法,編譯器會在編譯時保留這個方法的實現。也就是說,這個方法屬於類,但是不屬於任何成員,不管這個類的實例是否存在,它們都會存在。就像入口函數Static void Main,因為它是靜態函數,所以可以直接被調用。
Virtua:當一個方法被聲明為Virtual時,它是一個虛擬方法,直到你使用ClassName variable = new ClassName();聲明一個類的實例之前,它都不存在於真實的內存空間中。這個關鍵字在類的繼承中非常常用,用來提供類方法的多態性支持。
overrride:表示重寫 這個類是繼承於Shape類
virtual,abstract是告訴其它想繼承於他的類 你可以重寫我的這個方法或屬性,否則不允許。
一個生動的例子 :老爸表示基類(被繼承的類) 兒子表示子類(繼承的類)
老爸用virtual告訴兒子:"孩子,你要繼承我的事業,在這塊上面可以自己繼續發展你自己的"
兒子用override告訴全世界:"這個我可不是直接拿我爸的,他只是指個路給我,是我自己奮斗出來的"
abstract:抽象方法聲明使用,是必須被派生類覆寫的方法,抽象類就是用來被繼承的;可以看成是沒有實現體的虛方法;如果類中包含抽象方法,那么類就必須定義為抽象類,不論是否還包含其他一般方法;抽象類不能有實體的。
三、總結下
接口
1.接口只提供方法規約,不提供方法體;
2.接口中的方法不能用關鍵字修飾;
3.接口里不能有接口和變量;
4.接口里的方法在子類中必須全部實現;
5.接口可以實現多重繼承;
abstract:聲明抽象類、抽象方法
1.抽象方法所在類必須為抽象類
virtual:標記方法為虛方法
1.可在派生類中以override覆蓋此方法