類與多態

                             [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.什麼時候用模板設計模式

  • 在多段代碼中有一些代碼重複使用的時候, 可以將重複的代碼寫在一個模板方法中, 不確定的代碼定義成一個抽象方法. 

  • 在模板方法中調用抽象方法.

  • 定義子類繼承該類, 重寫抽象方法, 寫入不同的代碼即可, 原來相同的代碼可以從父類繼承到, 不用重新再寫


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章