《Java面向對象編程的三大特性》閱讀筆記

前言

偶然讀到這篇文章(《Java面向對象編程的三大特性》),想來這也算論文?這種還不滿網絡都是?讀罷覺得寫得還真不錯,這裏以我愚見,簡單點評一二,不足之處還望指教。

閱讀筆記

筆記1

文中有一句是這樣說的:“將屬性進行私有化操作,對每個屬性創建 set 和 get 方法,如果這裏存在一個帶參數的構造函數,以此同時就必須存在一個不帶參數的構造函數。

評註1:其實未必總要開set和get方法。
初學者可能剛接觸的時候被告知寫set和get,但其實set的存在可能破壞封裝。
舉個簡單的例子,比如每個學生Student類都有一個s_id,這個屬性在數據庫表中對應着主鍵,應該是唯一且不可變的。如果我們簡單地開一個public的set和一個public的get,就可能導致外部隨意修改本不可變的s_id屬性。

評註2:其實未必存在一個不帶參數的構造函數。
有一說一,真的不必。只是,爲了簡便起見,可以都自動生成的。
另說,如果沒指定構造器,默認有一個無參數構造器;如果存在了帶參數的構造函數,就沒有默認的這個無參數構造器了。
再說,如果注意構造器參數不全甚至沒有,就導致我們想初始化某些屬性就必須再指定set方法。

筆記2

  • 封裝的優點
    (1)提高了安全性,防止一些誤操作。
    (2)提高了複用性,封裝之後便於調用。
    (3)信息隱藏,隱藏了實現細節。
  • 繼承的優點
    (1)繼承可提高代碼的複用性。
    (2)繼承可提高代碼的穩定性。
    (3)繼承讓類與類之間產生關係,是多態的前提。
  • 多態性優點
    (1)提高了代碼的維護性(繼承保證)。
    (2)提高了代碼的擴展性(由多態保證)。

封裝 -> 繼承 -> 多態這不單單是三個名詞的簡單羅列,更是一步步遞進的關係。對於面 向對象的程序設計,封裝是基礎,繼承是多態 的前提條件,三者邏輯順序不可顛倒。

評註:封裝、繼承、多態,看似樸實的三個名詞,想要理解透很難。甚至很多人在學完一兩輪OOP相關之後還不能真正理解繼承和多態。
這裏的優點說的還很不錯,給點個贊!

筆記3

Java如果想實現多態必須存在以下幾個條件纔可以成功實現:

  • 繼承:在多態的管理網中必須要有存在繼承關係的子類和父類。
  • 重寫:子類會針對父類中的一些特點方法進行自定義,後續在使用這些方法時會調用子類中重寫的方法。
  • 向上轉型:在多態當中需要把子類引用的對象賦值給到父類,只有這樣做才能達到可以調用父類、子類方法的目的。

滿足了以上的幾個條件,我們可以在同一個繼承的結構中使用統一邏輯代碼,進而去處理不同類別的對象,進而達到執行不同方法的目的。

評註:沒有繼承哪有多態?確實要先理解繼承才能理解多態。重寫和向上轉型確實也是很重要的環節。你直接定義SubClass obj = new SubClass();這樣有什麼意義呢?
另說,很多新手寫Java代碼的時候不習慣寫List<String> list = new ArrayList<>();,而是隻習慣寫ArrayList<String> list = new ArrayList<>();,我這裏不討論具體在這個例子的問題,只據此說說繼承與多態。
其實上面的ArrayList實現了List接口,這種implement也算一種接口繼承(畢竟Java通過接口的實現和繼承實現了更靠譜的多繼承),根據《瘋狂Java講義》的說法,李剛老師稱呼左邊類型爲“編譯時類型”而右邊類型爲“運行時類型”,也蠻有趣的。
接着說下去,左邊的編譯時類型至少要是在繼承樹裏不能低於右邊類型的,這也體現了繼承(甚至可能是“隔代繼承”)和向上轉型。
既然是繼承,左邊類型的方法可能被右邊類型重寫某些可重寫(@Override)的方法,你不重寫的話表示子類和父類在這種“行爲”上時一致的,那要多態幹啥?
根據上面的三點,基本可以實現簡單的多態了,子類對象能體現出不同於父類的特點。編譯時的類型是左邊的,你要是調用某個左邊不存在的方法還會編譯錯誤,但你調用左邊的一個方法,做的是右邊的事。
再回到上面關於List的問題,我建議還是把接口類型放在左邊,對於初學者來說這是一種好習慣,也能逐漸幫你理解繼承和多態(前提是你用心啊)。
再就是,嘗試多態最好還是多嘗試接口多態而不是普通的繼承多態,你慢慢體會就知道了。

文中的圖

下面是文中的一個圖,鑑於知網版權保護不能貼文章,但圖表可下載所以跟大家分享一下(侵刪):
在這裏插入圖片描述

原文免費閱讀地址

《Java面向對象編程的三大特性》

參考文獻

[1]嶽青玲.Java面向對象編程的三大特性[J].電子技術與軟件工程,2019(24):239-240.

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