總結
1:不管是重寫還是覆蓋都不會影響父類自身的功能(廢話,肯定的嘛,除非代碼被改)。
2:當用子類創建父類的時候,如 C1 c3 = new C2(),重寫會改變父類的功能,即調用子類的功能;而覆蓋不會,仍然調用父類功能。
3:虛方法、實方法都可以被覆蓋(new),抽象方法,接口 不可以。
4:抽象方法,接口,標記為virtual的方法可以被重寫(override),實方法不可以。
5:重寫使用的頻率比較高,實現多態;覆蓋用的頻率比較低,用於對以前無法修改的類進行繼承的時候。
6:關鍵字:virual,abstract,interface,override(虛函數,抽象,接口,重寫)
虛函數(Virtual),抽象函數(abstract)和接口的區別
1.virtual:允許被重寫,但不強制要求。聲明時提供其自身實現;
2.abstract:強制要求其繼承者重寫。聲明時不提供其自身的實現,抽象類不能被實例化;
3.interface:接口就是協議,其聲明的成員(屬性,方法,事件和索引器)必須由其繼承的類實現。接口不能直接被實例化。
虛方法與抽象方法的區別在於,虛方法提供自身的實現,並且不強制要求子類重寫;而抽象方法不提供自身的實現,並且強制子類重寫。
抽象類與接口很相似,但是思路不一樣。接口是公開類的成員,而抽象類則是抽象類成員以要求子類繼承並實現。
抽象類和接口
相同點:
(1) 都可以被繼承
(2) 都不能被實例化
(3) 都可以包含方法聲明
(4) 派生類必須實現未實現的方法
區 別:
(1) 抽象基類可以定義字段、屬性、方法實現。接口只能定義屬性、索引器、事件、和方法聲明,不能包含字段。
(2) 抽象類是一個不完整的類,需要進一步細化,而接口是一個行為規范。微軟的自定義接口總是后帶able字段,證明其是表述一類“我能做。。。”
(3) 接口可以被多重實現,抽象類只能被單一繼承
(4) 抽象類更多的是定義在一系列緊密相關的類間,而接口大多數是關系疏松但都實現某一功能的類中
(5) 抽象類是從一系列相關對象中抽象出來的概念, 因此反映的是事物的內部共性;接口是為了滿足外部調用而定義的一個功能約定, 因此反映的是事物的外部特性
(6) 接口基本上不具備繼承的任何具體特點,它僅僅承諾了能夠調用的方法
(7) 接口可以用於支持回調,而繼承並不具備這個特點
(8) 抽象類實現的具體方法默認為虛的,但實現接口的類中的接口方法卻默認為非虛的,當然您也可以聲明為虛的
(9) 如果抽象類實現接口,則可以把接口中方法映射到抽象類中作為抽象方法而不必實現,而在抽象類的子類中實現接口中方法