[7]類與多態
一.Object類
1.Object類是什麼
Object是Java中所有類的父類, 一個類如果不繼承任何類, 那麼默認繼承Object
Object類中的所有方法都會被子類繼承
* 2.toString方法
toString方法的功能是將一個對象轉爲字符串形式
在println或者print方法中打印一個對象的時候, 默認會調用該對象的toString方法, 然後將返回值顯示到屏幕
toString方法在Object類中默認返回的是"類名@地址"的形式
如果我們不想返回此種形式, 可以在類中重寫toString方法, 通常我們重寫後都是返回該類的屬性
把一個對象和一個String用"+"做運算的時候, 會調用該對象的toString方法先轉爲String再相加
通常我們定義一個類的時候, 都會重寫toString, 這樣別人使用該類的時候就可以把對象轉爲字符串了
* 3.equals方法
比較兩個對象是否相同(內容相同)
比較字符串的時候, 如果我們希望比較兩個字符串的內容是否相同, 那麼就可以使用equals方法
當我們定義了一個類, 使用這個類創建了兩個對象, 即使兩個對象屬性完全相同, 他們也不是同一個地址上的對象, 用"=="判斷結果會是false.
我們調用equals方法比較兩個對象, 會先在當前類找是否有equals方法, 如果沒有就會找Object類, Object類的equals默認是比較地址.
如果我們不想比較地址, 希望按照對象的屬性來比較, 就可以重寫該方法. String類的equlas方法可以比較String的內容, 就是因爲重寫了該方法.
二.組合設計模式
1.什麼是組合設計模式
在定義一個類的時候, 需要使用另一個類的功能時, 可以使用組合設計模式
2.組合設計模式的寫法
用構造函數接收要組合的對象
定義成員變量, 記住組合進來的對象
通過成員變量, 調用被組合對象的方法
3.組合和繼承的區別
組合設計模式不佔用繼承位置
在只是需要調用, 而沒有邏輯上的父級關係時, 不合適用繼承
繼承之後, 子類可以當作父類來用
* 三.多態
1.什麼是多態
多態就是一段代碼可以運行出多種形態
2.怎麼實現多態
在定義方法的時候, 形參可以指定爲父類類型, 這樣所有的子類對象也可以傳入, 傳入不同的子類對象, 就可以調用不同的方法. 代碼就實現了多種形態.
四.抽象類
1.什麼是抽象類
用abstract關鍵字修飾的類就是抽象類
抽象類中可以定義抽象方法
抽象類不能創建對象
2.怎麼定義抽象類
子類中方法聲明和實現都相同的方法, 在父類中聲明, 直接實現.
子類中方法聲明相同, 實現不同的方法, 在父類中聲明爲抽象方法, 子類中實現
3.爲什麼定義抽象類
有時候多個類中具有相同的方法聲明, 而實現方式不同, 我們就可以在父類中定義一個抽象方法, 在子類中實現
父類中還可以將子類中相同的方法定義出來, 這樣提高代碼複用性.
父類中聲明瞭抽象方法, 雖然沒有實現, 但是在子類當作父類來用時, 通過父類變量也能調用到子類的方法, 更好的支持了多態
在別人閱讀我們的代碼時, 看到了抽象類, 就知道子類都有哪些方法.
4.抽象類的繼承
一個抽象類可以繼承另一個抽象類
一個普通的類如果繼承抽象類, 那麼所有的抽象方法必須重寫
抽象類中可以沒有抽象方法, 目的就是爲了不讓別人創建對象, 專門爲了給別人繼承來用的. GUI中一些Adapter就是這樣的抽象類.
五.final關鍵字
1.類:最終的類, 不能被繼承
2.方法:最終的方法, 不能被重寫
* 3.變量:最終的變量, 就是常量, 只能賦值一次. 可以用在局部變量, 成員變量, 形參
六.模板設計模式
1.什麼時候用模板設計模式
在多段代碼中有一些代碼重複使用的時候, 可以將重複的代碼寫在一個模板方法中, 不確定的代碼定義成一個抽象方法.
在模板方法中調用抽象方法.
定義子類繼承該類, 重寫抽象方法, 寫入不同的代碼即可, 原來相同的代碼可以從父類繼承到, 不用重新再寫