20155231 2016-2017-2 《Java程序設計》第4周學習總結
教材學習內容總結
學習目標
- 理解封裝、繼承、多態的關係
- 理解抽象類與接口的區別
- 掌握S.O.L.I.D原則
- 瞭解模式和設計模式
- 能正確覆蓋方法
- 瞭解垃圾回收機制
- 掌握Object類
- 掌握enum
第六章:繼承與多態
封裝、繼承、多態
- 繼承:面向對象中,子類繼承父類,避免重複定義的共同行爲;
- extends關鍵字:在繼承父類的程序代碼基礎上,補充定義新的程序代碼,擴充其本來沒有的行爲;
- 繼承的好處:避免重複的同時,如果要對相應的數據成員名稱作修改,只須要在父類中修改便可;
- is-a:子類與父類之間是is-a(是一種)關係,編寫代碼時可使用is-a檢查語法的邏輯是否正確:從=右邊往左讀,看右邊是否是左邊的子類。當右邊不是左邊的子類的時候,程序編譯錯誤,也可能存在檢查爲右邊多是左邊子類的不肯定的結果,這時能夠執行(Cast)叫程序住嘴語法,錯誤時拋出ClassCastException.
- 多態:單一接口操做多種類型的對象。
- is-a關係:子類只能繼承一個父類,即子類「是一種」父類,可用來判斷以下代碼片斷:
Role role1 = new Swordsman();
Swordsman swordsman = new Role();
- 從新定義:在繼承父類以後,定義與父類中相同的方法部署,但執行內容不一樣;在從新定義父類中某個方法時,子類必須撰寫與父類方法中相同的簽署;
抽象類
- 方法區塊中沒有任何程序代碼操做,使用abstract標示該方法爲抽象方法,,類中如有方法沒有操做,而且標示爲abstract,表示類定義不完整,稱爲抽象類。
- java中可使用interface來定義抽象的行爲和外觀。
- 子類繼承抽象類的兩種作法:繼續標示該方法或者操做抽象方法。
- 爲了工做的合理和編寫的方便,寫程序是能夠先建立實例,而後執行go()方法過程當中調用抽象方法。
繼承語法細節
- protected成員:被聲明爲protected的成員,相同包中的類能夠直接存取,不一樣包中的類能夠在繼承後的子類直接存取;
- 從新定義的細節:從新定義方法時,若只是但願在父類中方法先後作點加工,可在父類中直接添加,想取得父類中的方法定義,只需在調用前加上super關鍵字;(使用super關鍵字調用的父類方法不能定義爲private,同時,從新定義方法時,對於父類中的方法權限只能擴大不能縮小)
- JDK5以後,若是返回類型是父類中方法返回類型的子類,可經過編譯;
- 構造函數:若是子類構造函數中沒有指定調用父類中那個構造函數,默認會調用父類中無參數構造函數;
- final關鍵字:class前使用final,表示這是最後一個類不會再有子類;定義方法爲final表示最後一次定義方法;
- java.lang.Object:定義類時若沒有extends關鍵字,那必定是繼承java.lang.Object;(頂層父類,Object上定義的方法全部對象都繼承下來了,只要沒有定義爲final,均可以從新定義)
- tostring()、equals()都是Object類定義的方法,返回值類型分別爲字符串型和布爾型;
- instanceof運算符:判斷對象是否由某個類建立,左操做數是對象,右操做數是類,只要左操做數是右操做數的子類型,返回結果就爲true;
- 垃圾收集:程序執行流程中沒法再使用某個對象,該對象就是徒耗內存的垃圾,就會被回收;
第七章:接口與多態html
接口
- 接口:可用於定義行爲但不操做(表示擁有行爲,是多重繼承的一種方式),類要操做接口,就必須有implements關鍵字(爲了生成與特定接口相符合的類);
- 接口中定義的方法的處理方式:操做接口中定義的方法、再度將其標示爲abstract;
接口語法細節
- 接口的默認:接口中的方法沒有操做時,必定得是公開且抽象(interface關鍵字:定義抽象行爲與外觀);
- 枚舉常數:爲了在維護程序時使程序清晰;
- 匿名內部類:對於只使用一次的繼承某個類的子類或接口操做類,不需爲這些類定義名稱;
equals()
- equals()方法是Object類有定義的方法,程序代碼:
public boolean equals(Object obj){
return (this==obj);
}
2.instanceof運算符:判斷對象是否由某個類建立,左操做數是對象,右操做數十類。java
enum枚舉常數
enum可用於定義枚舉常數。enum定義了特殊類,繼承自java.lang.Enum,由編譯程序處理,直接撰寫會被拒絕。
教材學習中的問題和解決過程git
教材學習中的問題和解決過程
Swimmer swimmer = new Shark();
Swimmer swimmer = new Human();
Swimmer swimmer = new Submarine();\\編譯經過
- 解決過程:判斷右邊是否擁有左邊的行爲,即右邊對象是否操做了左邊接口;
Shark shark = swimmer;\\編譯失敗
由於有Swimmer行爲的不必定是shark實例,此時須要加上扮演語法:設計模式
Shark shark = (Shark) swimmer;
即執行時參考shark實例,讓其扮演shark(實際參考對象與扮演對象要一致,不然報錯);函數
代碼調試中的問題和解決過程
代碼提交過程截圖
![](http://static.javashuo.com/static/loading.gif)
代碼量截圖
spa
上週考試錯題總結
- 2.填空:~0b1010的十進制值是(-11)
- 4.填空:System.out.println(「」+52+25);的結果是(5225)
- 18.CH04 填空: p109 Average.java 求1,2,3,4,5的平均值的命令是(java cc.openhome.Average 1 2 3 4 5
- 26.CH05 填空:調用p145 sum函數計算1+2+3+4+5的代碼是(MathTool.sum(1,2,3,4,5))
- 28.CH05 填空:Java中類的成員變量必須進行初始化,不然會出語法錯誤。(X)
其餘(感悟、思考等,可選)
本次學習中,有不少新的概念,和以前的c語言有了很大區別。沒有太懂,還須要接着學習。.net
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第四周 |
334/732 |
1/4 |
12/80 |
|
參考:軟件工程軟件的估計爲何這麼難,軟件工程 估計方法設計
參考資料