20145302張薇《Java程式設計》第四周學習總結

20145302張薇發表於2016-03-27

20145302 《Java程式設計》第四周學習總結

教材學習內容總結

第六章

  • 繼承共同行為
  1. 物件導向中,子類繼承父類,避免重複的行為定義,不過並非為了避免重複定義行為就使用繼承。
  2. 程式程式碼重複在程式設計上就是不好的訊號,多個類間出現重複的程式程式碼時,設計上可考慮的改進方式之一,就是把相同的程式程式碼提升為父類。
  3. 在java中,繼承時使用extends關鍵字,private成員也會被繼承,只不過子類無法直接存取,必須通過父類提供的方法來存取(若父類願意提供訪問方法的話)。
  • 多型與is-a
  1. 在java中,子類只能繼承一個父類,並且子類與父類之間有一種is-a的關係。
  2. 多型,抽象的說,就是使用單一介面操作多種型別的物件。
  • 重新定義行為在繼承父類之後,定義與父類中相同的方法部署,但執行內容不同,這稱為重新定義(Override)。在重新定義父類中某個方法的時候,子類必須撰寫與父類方法中相同的簽署。
  • 抽象方法、抽象類如果某個方法區塊中真的沒有任何程式程式碼操作,可以使用abstract標示該方法public abstract void fight,定義不完整的類就不能用來生成例項,內含抽象方法的類也一定要定義為不完整的抽象類,子類繼承抽象類,對於抽象方法,一種是繼續標示其為抽象類,另一種就是操作抽象方法。
  • protected成員java中有publicprotectedprivate三個許可權關鍵字,但實際上有四個許可權範圍。
  • 重新定義的細節
  1. 如果想取得父類中的方法定義,可以在呼叫方法前,加上super關鍵字。
  2. 重新定義方法要注意,對於父類中的方法許可權,只能擴大不能縮小。
  3. 在JDK5後,重新定義方法時,如果返回型別是父類中方法返回型別的子類,也可以通過編譯。
  • 再看建構函式在建立子類例項後,會先進行父類定義的初始流程,在進行子類定義的初始流程,如果子類構造父類函式中沒有指定執行父類中哪個建構函式,預設會呼叫父類中無引數建構函式如果父類中定義了建構函式,子類建構函式時就要注意呼叫父類中的哪個函式。
  • 再看final關鍵字
  1. 如果class前使用了final關鍵字定義,那麼表示這個類是最後一個了,不會再有子類,也就是不能被繼承。
  2. 定義方法時,也可以限定該方法為final,這表示最後一次定義方法了,也就是子類不可以重新定義final方法。
  • java.lang.object
  1. 如果定義類時沒有使用extends關鍵字指定繼承任何類,那一定是繼承java.lang,Object
  2. 在java中,任何類追溯至最上層父類,一定就是java.lang.Objet
  • 垃圾收集
  1. 對於不再有用的物件,JVM有垃圾收集機制,收集到的垃圾物件所佔據的記憶體空間,會被垃圾收集器釋放。
  2. 在執行過程中,無法通過變數參考的物件,就是GC認定的垃圾物件。
  • 再看抽象類在不確定執行環境的時候,可以先建立出ConsoleGame例項,執行go()方法過程中呼叫到print()nextInt()println()等方法時,都是執行ConsoleGame中定義的流程。

第七章

  • 介面定義行為
  1. 對於定義行為,可以使用interace關鍵字定義,介面中的方法不能操作,直接標示為abstract,而且一定是public
  2. 操作某介面時,對介面中定義的方法有兩種操作方式,一是操作介面中定義的方法,二是再度將該方法表示為abstract
  3. 繼承會有“是一種”關係,而操作介面表示“擁有行為”。
  • 行為的多型與繼承相同,也可以讓一個物件強行扮演(cast)某種行為,與多型相同,只要是操作同一個介面的類都可以擁有介面的行為,可維護型也同時得到了較大的提高。
  • 解決需求變化在java中類可以操作兩個以上的類,可以同時繼承某個類並操作某些介面;於此同時,java中介面可以繼承自另一個介面,也就是繼承父介面行為,再在子介面中額外定義行為。
  • 介面的預設可以使用介面列舉常數,只能定義為public static final,如果有兩個介面都定義了方法,操作的兩個介面的類並不會有錯誤,照樣會通過編譯,所以要在設計時注意一下。
  • 使用enum列舉常數enum實際上定義了類,而enum中列舉的常數,實際上是public static final,而且為列舉型別例項,無法撰寫程式直接例項化列舉型別,因為建構函式許可權設定為private,只有類中才可以例項化。

教材學習中的問題和解決過程

  • 這兩章的聯絡比較緊密,一定得把前方的知識都搞懂了,循序漸進才能一步步的將程式碼看懂,這就很尷尬了,函式各種呼叫,在學習狀態不好,精神疲憊的時候是無法參透程式碼的含義的,子類,父類,繼承,介面,多型,列舉常數等含義都要反覆的看,否則不好理解。

程式碼除錯中的問題和解決過程

  • 問題在模仿Game遊戲程式碼時,我將Game中的遊戲程式碼都放到了一個包裡,給“Role”、“RPG”等命名時加上了數字編號,結果發現fight()無法使用。
  • 解決過程我發現,隨著類名稱的改變,自己在模仿書上的程式碼的同時應該注意相對應的修改一些程式碼,才可以正確的呼叫函式。而且改變了檔案的包的位置的時候,注意修改import偷懶的那個包的地址,包的巢狀中間用.隔開。

本週程式碼託管截圖

20145302張薇《Java程式設計》第四周學習總結

20145302張薇《Java程式設計》第四周學習總結

其他(感悟、思考等,可選)

  • 這周的學習任務很繁重,而且更加抽象了,而且函式各種呼叫,不太容易看懂,必須得細心。
  • 我發現,都到第七章了,良葛格的好多註釋還是“無聊的語法示範”,說明現在還在學習很基礎的知識,為了之後較熟練的應用java,我們應該紮實基礎,一週兩章感覺不太能消化完。

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 1500行 15篇 400小時
第一週 10/10 2/2 10/10 基礎知識
第二週 100/100 3/3 35/35 語法知識
第三週 300/300 4/4 60/60 瞭解物件

參考資料

相關文章