1. 本周學習總結
1.1 嘗試使用思維導圖總結有關多態與接口的知識點。
2. 書面作業
1.代碼閱讀:Child壓縮包內源代碼
1.1 com.parent包中Child.java文件能否編譯通過?哪句會出現錯誤?試改正該錯誤。并分析輸出結果。不能編譯通過,因為System.out.println(i)這句會出錯,因為其中的i是被private修飾,如果將其改成protected修飾,則可以成功編譯。
其結果為:
1.2 另外一個包中的OutOfParentPackage.java,能否編譯通過?提示什么錯誤?分析原因。如何更改才能使之正常編譯?不能通過編譯,因為OutOfParentPackage與Parent類是在兩個不同的包中,而且Parent不是public類,所以要先將Parent改為public類。
2.abstract進階:閱讀GuessGame抽象類的設計與使用源代碼
2.1 Guess改造前代碼很簡單,而改造后的代碼使用了抽象類、抽象方法看起來很復雜,那這樣的改造到底有什么好處呢?在還沒改造之前,只能在控制臺進行輸出;在改造后,使用抽象類,不僅可以在控制臺,也可以使用對話框圖形界面等輸入,操作就更多樣性了。
2.2 如果想將該游戲改造成圖形界面,應該進行一些什么操作?可以再建一個圖形界面的類然后去繼承抽象類。
2.3 結合該例子,你覺得什么時候應該使用abstract?abstract用于抽象類,主要是聲明但還沒實現其功能,當要使用時可以更靈活的變動。
2.4 重要:在這個例子中,變化的是什么,不變的是什么?嘗試結合abstract、繼承等概念進行說明。變化的是游戲里執行的環境以及方法,不變的是抽象類abstract它的定義,但它本身不能提供輸入輸出,需要繼承方法來使用。
3.Comparable與Comparator
3.1 描述Comparable接口的用途。為什么某個類實現了Comparable接口就可以直接使用Arrays.sort對其進行排序?因為Comparable的對象都可以進行比較,而Arrays.sort就是面向Comparable接口進行編程,所以可以進行排序。
3.2 有了Comparable接口為什么還需要Comparator接口呢?Comparator接口是對Comparable接口功能的一種補充,更能豐富Comparable接口。
3.3 可選:使用匿名內部類、Lambda表達式實現PTA編程5-2。
4.面向接口案例分析
閱讀Case-StudentDao.zip案例
4.1 畫出類關系圖,描述每個類與接口的作用。
4.2 StudenDaoListImpl與StudentDaoArrayImpl有何區別?StudentDaoArrayImpl是用數組實現而且長度是固定的,而 StudenDaoListImpl是用ArrayList實現且是動態的。
5.什么是面向接口編程?面向接口編程的好處是什么?
面向接口編程就是代碼要與接口相關聯(例如課堂上學的Comparable接口),而不需要考慮怎么去實現即將方法的聲明與實現隔離開。只要某個類實現了相關的接口,我們編寫的面向接口的代碼就可以適用,當要修改某個模塊時,不必對其他模塊進行大改動所以這樣就方便靈活許多。
6.結對編程:面向對象設計(大作業2-非常重要)
內容:使用Java代碼完成上周做的面向對象設計大作業,需要有初步界面。實現的功能盡量簡單,少而精,只包含必要的功能,不要追求高大全。
寫出:類圖(盡量精簡,不用太多子類,兩個即可)、系統常用功能描述、關鍵代碼與界面
形式: 兩人依托碼云合作完成。請在這里貼出你們的學號、姓名與任務分工。
注意: 再過幾次課要講Java圖形界面編程,到時候要將該系統升級為圖形界面。系統的業務邏輯部分應該變化不大,變化大的是輸入與輸出部分。所以編碼的時候,輸入(Scanner)與輸出(System.out)的代碼,請不要將其與某個業務處理函數綁死。
選做加分: 給出兩人在碼云上同一項目的提交記錄截圖,額外加分。注:兩個人在碼云上新建一個項目。
3. 碼云上代碼提交記錄及PTA實驗總結
PTA實驗總結:這次問題主要是實現Comparable接口,實現先對name升序排序,假如name相同則再對age進行升序排序;因為要用Arrays.sort進行排序,所以要有覆蓋compareTo()的方法。接口還是算比較實用的一種方法。