C#抽象類和虛方法


抽象類與抽象方法:
1.使用關鍵字abstract修飾的類,稱為抽象類.
2.抽象類只是用到一個類所具有的行為,不能單獨通過創建對象來使用.使用new是錯誤的.
3.抽象類中可以有抽象方法,也可以沒有任何抽象方法.
4.抽象類不能是靜態的(static)或者密封的(sealed)

抽象方法的概念與使用要點:
1.在抽象類中使用abstract修飾的方法,稱為抽象方法.
2.抽象方法必須在抽象類中定義,不能再普通類中使用.
3.抽象方法只能是一個方法的申明,不能有任何的方法體.
4.抽象方法僅僅表示一個應該具有的行為,具體實現由子類實現.
5.抽象方法在子類中被實現(重寫)必須使用關鍵字override.
6.子類必須重寫父類的所有抽象方法,除非子類本身也是抽象類.


多態:
不同對象,接收相同消息,產生不同的行為,稱為多態。

使用繼承實現多態:
父類中必須有抽象方法或虛方法.
子類必須重寫父類中的抽象方法或虛方法.
子類對象必須轉換成父類對象去使用.

LSP:李氏替換原則:
1.子類的對象能夠替換其父類.
2.父類對象不能替換子類.
3.父類的方法都要在子類中實現或者重寫.

is與as操作符:
is,檢查對象是否與指定類型兼容,如果轉換失敗程序中斷.
as 用於在兼容的引用類型之間執行轉換,轉換失敗返回null.

抽象方法僅僅是聲明,沒有任何實現內容。
抽象方法必須在子類中重寫以后才有使用價值.

針對抽象方法問題引出:
如果需要在父類中提供一個方法,該方法有自己的方法體,子類根據自己的需求決定是否重寫該方法,而不是必須重寫.

父類方法定義成:virtual,子類可以重寫也可以不重寫.
虛方法如同抽象方法一樣,可以實現多態.
子類沒有重寫虛方法時,直接調用父類的虛方法.

構造方法,用來對象創建過程中初始化。

Equals默認支持的是引用相等,想讓對象相同,重寫Equals

虛方法和抽象方法
用virtural修飾,要有方法體,哪怕是一個分號,可以被子類override,除了密封類都可以寫
用abstract修飾,不允許有方法體,必須被子類override,只能在抽象類中.

關於Equals()虛方法:
對於字符串和值類型能夠自動比較是否相等.
對於對象比較必須重寫后才有意義.

關於ToString()虛方法:
默認返回該對象的完全限定類型名稱,可根據需要重寫.
而對於值類型,因為重寫的該方法,則返回變量值的字符串表示.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM