何為重寫?
重寫(override)指子類修改父類中某個函式的函式體,需要重寫的父類中的函式必須是由virtual、abstract 或 override標註的,不能重寫非虛方法或靜態方法。
override是在繼承的時候,如果你寫的函式與要繼承的函式函式特徵(函式特徵包括函式名,引數的型別和個數)相同,那麼,加上這個關鍵字,在使用這個子類的這個函式的時候就看不見父類的函式了,它被覆蓋掉了。
用關鍵字virtual修飾的方法,叫虛方法。虛方法是多型的一種體現。相應的沒有用virtual修飾的方法,叫實方法。可以在子類中用override宣告同名的方法,這個叫「重寫」。「重寫」父類方法就是修改它的實現方式或者說在子類中對它進行重新編寫。重寫是重寫基類的方法,把父類中的方法變成我們更需要的。重寫會改變父類中的方法功能。
namespace 重寫
}public class a1
}public class a2 : a1
}}
何為覆蓋?
覆蓋(new)指重新定義子類中與父類具有相同函式特徵的的函式體。子類中有一函式和父類中函式的函式特徵相同,但函式體不同,稱為覆蓋。這種覆蓋又稱為隱藏,是隱藏父類中相同的函式,並沒有進行重寫。在子類中用new 關鍵字修飾,定義的與父類中同名的方法。覆蓋不會改變父類方法的功能。
namespace 覆蓋
}public class b1
}public class b2 : b1
}}
重寫vs覆蓋
1:不管是重寫還是覆蓋都不會影響父類自身的功能(廢話,肯定的嘛,除非**被改)。
2:當用子類建立父類的時候,如 a1 a3 = new a2(),重寫會改變父類的功能,即呼叫子類的功能;而覆蓋不會,仍然呼叫父類功能。
3:虛方法、實方法都可以被覆蓋(new),抽象方法,介面不可以。
4:抽象方法,介面,標記為virtual的方法可以被重寫(override),實方法不可以。
5:重寫使用的頻率比較高,實現多型;覆蓋用的頻率比較低,用於對以前無法修改的類進行繼承的時候。
過載
overload:過載指的是同乙個類中有兩個或多個名字相同但是引數不同的方法,(注:返回值不能區別函式是否過載),過載沒有關鍵字。返回值可能不同,可能相同。
public void fun()
public void fun(int i)
【總結】
感覺這些概念性的東西,長的差不多,很是相似,而且感覺他們之間的關係有種剪不斷理還亂。這三個概念光紙上談兵還是沒有多大價值的,還是需要我們不斷的去實踐,利用例子中發現不同,進而有更加深入的理解。不管怎麼樣,查詢一些資料,還是能更加深入的了解一次。總結就是對知識的彙總,所以利用總結提公升自己!
c 覆蓋 重寫 過載
乙個抽象方法,介面,標記為virtual的方法,你在派生類中去實現,或者改寫他的功能,叫重寫 在父類中定義了乙個方法如 public string getname 方法,在派生類中再次定義了乙個同樣的方法public string getname 則派生類覆蓋了父類的方法 覆蓋重寫的區別 重寫 pu...
過載和覆蓋重寫
過載即在同乙個類中,方法名稱相同,引數列表不同 引數列表的順序不同或者引數列表的個數不同 的方法,稱為過載。public class overloaddemo public overloaddemo string name,int age public overloaddemo string nam...
C 過載 覆蓋 重寫區別
overload 過載指的是同乙個類 中有兩個或多個名字相同但是引數不同 的方法,注 返回值不能區別函式是否過載 過載沒有關鍵字 override 過載也稱重寫是指子類對父類中虛函式或抽象函式 的 覆蓋 這也就是有些書將過載翻譯為覆蓋的原因 但是這種 覆蓋 和用new關鍵字來覆蓋是有區別的。new ...