作業06-接口、內部類
1. 本周學習總結
1.1 面向對象學習暫告一段落,請使用思維導圖,以封裝、繼承、多態為核心概念畫一張思維導圖或相關筆記,對面向對象思想進行一個總結。
注1:關鍵詞與內容不求多,但概念之間的聯系要清晰,內容覆蓋面向對象的核心內容即可。
注2:顏色要少、連線不要復雜,必要的時候要在連線上進行說明。
1.2 可選:使用常規方法總結其他上課內容。
2. 書面作業
1. clone方法
1.1 在test1包中編寫Employee類,在test2包中新建一個Test類,並在其main中新建test1包中的Employee的對象,然后使用clone方法克隆一個新對象,能否成功?為什么?
不能成功 因為clone()方法是用protected 修飾的 只能對於test1 包內可見 在test2 包內是不可見的 如果將方法用public 修飾 即可成功
1.2 如果要為自定義的類覆蓋clone方法,需注意什么?
Object對象中的clone方法是被protected修飾,如果要在子類中覆蓋clone方法,則該方法要被public修飾。
還需要實現Cloneable接口!
1.3 Object對象中的toString, equals, hashCode方法都使用public修飾,而clone方法卻被protected修飾,請嘗試解釋原因。為什么不聲明為public呢?
用protected修飾clone方法 主要是為了實現讓子類從新去屑方法 實現深拷貝 防止在其他任何地方隨意的調用 修改而導致了對於原來對象造成影響
2. 內部類
2.1 使用匿名類與Lambda表達式改寫題集面向對象2-進階-多態接口內部類的題目7-2。請貼圖關鍵代碼與運行結果,請在運行結果中出現你的學號與姓名。
2.2. 分析下列代碼,回答shapeComparator所指向的對象與Comparator接口有什么關系?
Comparator<Shape> shapeComparator = new Comparator<Shape>() { @Override public int compare(Shape o1, Shape o2) { //你的代碼 } };此處輸入代碼
shapeComarator實現了Comparator接口 讓這個對象能夠使用Arrary.sort()方法排序
2.3 題集:6-1(匿名內部類)實驗總結。你覺得使用匿名內部類有什么好處?
匿名內部類就是沒有名字的內部類 匿名類只能夠用一次 就是通常用來簡化代碼
但是使用匿名內部類需要有一個前提條件 就是必須要繼承一個父類或者實現一個接口
比如當我們用child類繼承person類 但是我們只實現child類的一個類 這樣的話我們單獨去編寫一個類很麻煩 所以我們用匿名內部類 就可以減少代碼量
3. PTA實驗總結
3.1 PTA(自定義接口)。並回答:相比較不寫接口,直接寫一個類包含IntegerStack相應的方法來說,定義IntegerStack接口,然后定義其實現類這種方式有什么好處?
如果把IntegerStack定義為接口我們可以用多種形式去實現,可以使用數組,也可以使用列表來實現。
3.2 PTA(靜態內部類)。並回答:你覺得什么時候應該使用靜態內部類?靜態內部類與內部類有什么區別?
兩者在邏輯關系上聲明都是在一個類的內部,但是想能夠保證持續存在,並且能夠給別的別的類隨時調用的類,可以聲明為靜態內部類。
靜態內部類屬於類而不屬於實例,是一直存在並且隨時可以通過類名進行調用。
3.3 PTA(繼承覆蓋綜合練習-Person、Student、Employee、Company)。並回答:使用Collections.sort對引用類型數組進行排序需要有一個什么前提條件?
Collections.sort對引用類型數組進行排序的前提條件就是必須要實現一個接口 比如說Comparable 而且要重新編寫比較方法
4.大作業-繼續完善(嘗試使用接口改造你們的系統)
參考Case-StudentDao.zip案例
假設在不同的實現中,購物車里的商品有的是存放在ArrayList,有的是存放在數組中。
4.1 現在希望將系統中購物車的操作抽象到相應的DAO接口。
4.2 為該接口定義至少兩個實現(如數組、列表、文件)。截圖自己負責部分的關鍵代碼,要求出現名字與學號。
數組
列表
4.3 給出你們的Main程序,說明定義DAO接口的好處。
方便操作 更有靈活性 用不同的方式定義方法
5. 代碼閱讀:PersonTest.java(abstract、多態、super)
5.1 畫出類的繼承關系
5.2 main函數的代碼實現什么功能?
對四個對象按年齡大小進行升序排序
5.3 如果將子類中的super構造函數去掉行不行?
不可以 子類是不能夠繼承private 也沒有辦法繼承構造函數 所以我們必須要用到super 去調用父類的構造函數
5.4 PersonTest.java中哪里體現了多態?
在文件里 對於四個類 Person類 Student類 Employee類 以及Manager類和Programmer類里面的toString方法覆蓋體現了多態性
參考鏈接:
PersonTest.java
3.碼雲及PTA
題集:jmu-Java-04-面向對象2-進階-多態接口內部類
3.1. 碼雲代碼提交記錄
在碼雲的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然后搜索並截圖
3.2 截圖PTA題集完成情況圖
需要有兩張圖(1. 排名圖。2.PTA提交列表圖)
3.3 統計本周完成的代碼量
需要將每周的代碼統計情況融合到一張表中。
周次 | 總代碼量 | 新增代碼量 | 總文件數 | 新增文件數 |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 |
3 | 386 | 386 | 5 | 5 |
4 | 882 | 496 | 11 | 6 |
5 | 1476 | 594 | 18 | 7 |
6 | 1982 | 506 | 23 | 5 |