抽象類與抽象方法:
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()虛方法:
默認返回該對象的完全限定類型名稱,可根據需要重寫.
而對於值類型,因為重寫的該方法,則返回變量值的字符串表示.