Java核心技術卷一 · 筆記(2)
目錄
- 1.多態、動態綁定
- 2.覆蓋
- 3.阻止繼承:final 類和方法
- 4.抽象類(abstract修飾)
- 5. 4 個訪問修飾符:
- 6.toString()
- 7.對設計繼承關系很有幫助的建議
- 8.接口
- 9.默認方法
1.多態、動態綁定
一個對象變量(例如, 變量 e) 可以指示多種實際類型的現象被稱為多態(polymorphism)。 在運行時能夠自動地選擇調用哪個方法的現象稱為動態綁定(dynamic binding)
2.覆蓋
如果在子類中定義了一個與超類簽名相同的方 法, 那麽子類中的這個方法就覆蓋了超類中的這個相同簽名的方法。
在覆蓋一個方法的時候,子類方法不能低於超類方法的可見性。特別是, 如果超類 方法是 public, 子類方法一定要聲明為 public。
3.阻止繼承:final 類和方法
有時候,可能希望阻止人們利用某個類定義子類。不允許擴展的類被稱為 final 類。
4.抽象類(abstract修飾)
- 抽象方法充當著占位的角色, 它們的具體實現在子類中。擴展抽象類可以有兩種選擇。 一種是在抽象類中定義部分抽象類方法或不定義抽象類方法,這樣就必須將子類也標記為抽 象類;另一種是定義全部的抽象方法,這樣一來,子類就不是抽象的了。
- 類即使不含抽象方法,也可以將類聲明為抽象類。
- 抽象類不能被實例化。也就是說,如果將一個類聲明為 abstract, 就不能創建這個類的對 象。
5. 4 個訪問修飾符:
1 ) 僅對本類可見 private。
2 ) 對所有類可見 public.
3 ) 對本包和所有子類可見 protected。
4 ) 對本包可見— —默認(很遺憾), 不需要修飾符。
6.toString()
強烈建議為自定義的每一個類增加 toString 方法。這樣做不僅自己受益, 而且所 有使用這個類的程序員也會從這個日誌記錄支持中受益匪淺。
7.對設計繼承關系很有幫助的建議
- 將公共操作和域放在超類
- 不要使用受保護的域
- 使用繼承實現“ is-a” 關系
- 除非所有繼承的方法都有意義, 否則不要使用繼承
- 在覆蓋方法時, 不要改變預期的行為
- 使用多態, 而非類型信息:使用多態方法或接口編寫的代碼比使用對多種類型進行檢測的代碼更加易於維護和擴展。
- 不要過多地使用反射
8.接口
接口(interface) 技術,這種技術主要用來描述類具有什麽功能,而並不 給出每個功能的具體實現。一個類可以實現(implement)—個或多個接口,並在需要接口的 地方,隨時使用實現了相應接口的對象。 接口不是類,而是對類的一組需求描述,這些類要遵從接口描 述的統一格式進行定義。
- 接口絕不能含 有實例域。
- 提供實例域和方法實現的任務應該由實現接口的那個類來完成。因此, 可以將接口看成 是沒有實例域的抽象類,但是這兩個概念還是有一定區別的。
9.默認方法
可以為接口方法提供一個默認實現。必須用 default 修飾符標記這樣一個方法。
- 默認方法的一個重要用法是 “ ‘ 接口演化” (interface evolution)。(為接口增加方法可以保證“ 二進制兼容”)。
解決默認方法沖突
Java 的相應規則要簡單得多。規則如下:
1 ) 超類優先。如果超類提供了一個具體方法,同名而且有相同參數類型的默認方法會 被忽略。
2 ) 接口沖突。 如果一個超接口提供了一個默認方法,另一個接口提供了一個同名而且 參數類型(不論是否是默認參數)相同的方法, 必須覆蓋這個方法來解決沖突。
......後續更新lambda表達式......
Java核心技術卷一 · 筆記(2)