---------------------- asp.net+android+ios開發、.net培訓、期待與您交流! ----------------------
多型
多型就是物件可以表現多個型別的能力,比如說類,子類可以有父類的方法, 也可以重寫父類的方法等,有多種能力。
類的多型表現為,子類可以有與父類方法名相同的方法,子類可以重寫父類的方法
如果子類和父類的方法重名了,編譯的時候會報警告也就是報綠線,如何把綠線乾掉呢?
第一種方法:我們可以在子類方法的訪問修飾符後面加new。
第二種方法:我們可以在父類的方法上加乙個virtual修飾,然後子類在繼承父類的時候,可以用override來重寫父類的方法,這兩個都是在訪問修飾符後加。
當子類與父類方法名相同時,有兩種情況:
1、引數不同時,表現為過載
2、引數相同時,表現為重寫或者覆蓋
覆蓋就是子類在繼承時,當與父類方法名相同,如果不重寫父類的方法,可以加new關鍵字,隱藏父類方法,也就是覆蓋。
怎麼重寫父類方法?
1、在父類的訪問修飾符後加virtual修飾,這時,父類為虛方法
2、在子類的訪問修飾符後加override,重寫父類方法
重寫與過載的區別
過載是方法的名稱相同,引數或引數型別不同,進行多次過載以適應不同的需求。過載是面向過程的概念
重寫是進行父類中方法的重寫。重寫是物件導向的概念
重寫與過載不一樣,要區分開
什麼叫虛方法?
方法中有virtual修飾的叫虛方法
虛方法可以在子類中通過override關鍵字來重寫
常見的虛方法:tostring() equals
虛方法與重寫需要注意幾點:
1、方法不能用static修飾,也就是靜態方法不能重寫也不能是虛方法
2、重寫時,子類的引數必須與父類相同。
3、虛方法不能用private修飾,也就是說virtual不能與private一起使用
抽象
如果乙個方法,有abstract修飾,那麼這個方法就叫抽象方法,抽象方法所在的類,也要用abstract修飾,這個類也叫抽象類
抽象方法沒有方法體,直接分號結束 如:public
abstract
void shout();
如果乙個類繼承了抽象類,那麼,這個類中的方法,必須要重寫父類中的抽象方法。
簡單說,有abstract修飾的方法和類叫抽象方法抽象類,抽象方法沒有方法體,所以在繼承的時候子類必須要重寫方法,抽象方法只能在抽象類中。
注意:1、抽象方法沒有方法體
2、抽象成員只能存在於抽象類中
3、抽象類可以有非抽象成員
4、抽象類的派生類必須實現抽象方法體
5、抽象類只能用作父類,無法例項化
虛方法與抽象方法的比較:
介面
什麼是介面?有inte***ce修飾的,完全抽象的一種約定,其中的成員只有定義,沒有實現內容
介面的名稱通常以大寫i開頭,如ifly iony
語法:[訪問修飾符] inte***ce 介面名
介面成員定義
介面中可以有屬性、方法,但是未實現,就是不能直接用,因為介面成員還沒定義方法體。如:
inte***ce
ifly
//定義了乙個介面 {
voidfly(); //
介面成員
介面是用來實現的,所有成員預設為public
怎樣實現乙個介面?
與繼承類似,但必須有實現內容,也就是多了一段**,**中為要實現的內容,然後就可以呼叫介面內的方法了。如:
public
void fly()
{console.writeline("
我是超級美女"); //
實現內容
如果乙個類只實現介面,冒號後直接介面名,即繼承了類又實現了介面,在父類後逗號+介面名,類必須寫在前面,介面一定是在後面。如:
class student:person,icomparable
乙個類只能繼承乙個父類,但可以實現多個介面
介面與類的異同
不同點:
1、介面不能直接例項化
2、介面不包含方法的實現
3、介面可以多實現,類只能單繼承
4、類可以在不同的原始檔之間進行拆分,就是可以有多個檔案
相同點:
介面、類和結構都可以從多個介面繼承
介面類似於抽象父類:繼承介面的任何非抽象型別都必須實現介面的所有成員。
介面和類都可以包含事件、索引器、方法和屬性
c#支援多重繼承麼?
類之間不支援,介面之間支援。
類對介面叫做實現,不叫繼承。
類只能有乙個父類,但可以有多個介面,如果說父類是爹,介面就相當於能力,可以有多個能力,但不能有多個爹。
當程式編譯時沒出錯,執行出現錯誤,我們可以除錯程式,找出錯的原因,然後解決問題。
程式除錯的步驟
1、猜測出錯位置,設定斷點
2、單步執行
3、觀察變數
4、發現問題
5、修正**,重新執行
6、解決問題
ps:程式出現異常或者錯誤時,千萬要冷靜淡定,看下異常提示或錯誤原因,一條條檢查**,或者設定斷電除錯下,看下是不是****寫漏還是寫錯,補上更正。。
---------------------- asp.net+android+ios開發、.net培訓、期待與您交流! ----------------------
黑馬程式設計師 多型
asp.net android ios rel noopener noreferrer target blank asp.net android ios開發 net rel noopener noreferrer target blank net培訓 期待與您交流!多型 理解為事物存在的多種體現形似...
黑馬程式設計師 多型
多型 可理解為事物存在的多種體現形態。人 男人 女人 動物 貓 狗 貓 c new 貓 動物 c new 貓 可理解為父類引用指向子類物件,是多型在物件上的體現性。而過載和覆蓋則是多型在函式上的體現性。下面將從以下四個方面學習多型 1 多型的表現形式 父類的引用指向了自己的子類物件。父類的引用也可以...
黑馬程式設計師 多型
問題點 如何具體理解父類的引用?答 這個父類就是這個子類的另一種形態,可指向 多型的通俗理解 說白了,乙隻貓過來了,可以說 這貓好可愛 也可以說 這小動物很可愛 就是說貓具備了 貓 和 動物 這兩種形態,多型就這樣理解!動物 y new 貓 看到這樣的現象就可以看做是多型的出現了!多型的好處 父類引...