1. 本周學習總結
1.1 面向對象學習暫告一段落,請使用思維導圖,以封裝、繼承、多態為核心概念畫一張思維導圖或相關筆記,對面向對象思想進行一個總結。
2. 書面作業
1.clone方法
1.1 在test1包中編寫Employee類,在test2包中新建一個Test類,並在其main中新建test1包中的Employee的對象,然后使用clone方法克隆一個新對象,能否成功?為什么?
Object類中的clone方法的源代碼中clone方法是被protected修飾的,因此不能在其他包內被訪問。需要重寫Object類的clone方法才可以正常使用。
1.2 如果要為自定義的類覆蓋clone方法,需注意什么?
在聲明時需要把clone方法聲明為public
實現時要clone對象以及其引用變量,這樣才能達到深克隆。
注意要實現Cloneable接口
需要調用super.clone()。
1.3 Object對象中的toString, equals, hashCode方法都使用public修飾,而clone方法卻被protected修飾,請嘗試解釋原因。為什么不聲明為public呢?
clone方法是僅拷貝對象的引用,引用的特點是當改變引用時,對象的具體值也會改變,如果聲明為public隨意被其他對象調用就會使得對象值隨意被改變,聲明為protected讓子類去重寫方法實現深拷貝就能防止這種現象發聲明
2. 內部類
2.1 使用匿名類與Lambda表達式改寫題集面向對象2-進階-多態接口內部類的題目7-2。請貼圖關鍵代碼與運行結果,請在運行結果中出現你的學號與姓名。
2.2. 分析下列代碼,回答shapeComparator所指向的對象與Comparator接口有什么關系?
Comparator
shapeComparator用匿名內部類實現了Comparator接口,compare方法被重寫。
2.3 題集:6-1(匿名內部類)實驗總結。你覺得使用匿名內部類有什么好處?
實現ActionListener接口,不用重寫其中的方法,只要根據題目要求實現一個簡單循環就好,
對於只要使用一次的類,完全可以用匿名內部類來代替,而不用再去多寫一個類來實現,可以讓我們的代碼更加的簡潔方便
3. PTA實驗總結
3.1 PTA(自定義接口)。並回答:相比較不寫接口,直接寫一個類包含IntegerStack相應的方法來說,定義IntegerStack接口,然后定義其實現類這種方式有什么好處?
定義一個IntegerStack接口存放棧的一些基本操作(判斷棧空等),在ArrayIntegerStack類中具體實現這些操作。
一個類只能繼承一個父類,但可以實現多個接口,定義一個接口后再實現接口,可以用各種各樣不同的方法實現,如果之后還想實現其他接口,可以直接添加新的接口
3.2 PTA(靜態內部類)。並回答:你覺得什么時候應該使用靜態內部類?靜態內部類與內部類有什么區別?
這一題實在是不會,這里引用荊天婷同學的回答
首先我們得先有一個認識,靜態內部類也可以說成是嵌套類,可以有自己包含的靜態內部成員,靜態內部類只屬於自己。因而靜態內部類並不會隨着外部類的新建而受到影響。所以我覺得應該在內外部不需要訪問的時候使用靜態內部類,可以提高代碼效率。
靜態內部類與內部類直觀上的差別就是有無static,當然這只是表面。靜態內部類創建時無需外部類成員,內部類需要依靠外部類。並且靜態內部類可以有靜態成員也可以有非靜態成員,但是內部類不能有靜態成員。
3.3 PTA(繼承覆蓋綜合練習-Person、Student、Employee、Company)。並回答:使用Collections.sort對引用類型數組進行排序需要有一個什么前提條件?
要實現比較接口(Comparable、Comparator)並重寫對應的比較方法。
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來調用父類相應的方法
super關鍵字是實現子類對父類訪問的唯一途徑,去掉了super構造函數,子類就無法調用父類中被重寫的方法。
報錯信息:Implicit super constructor Person() is undefined. Must explicitly invoke another constructor
5.4 PersonTest.java中哪里體現了多態?
四個類中ToString方法重寫就是多態的體現
3. 碼雲及PTA
題目集:[jmu-Java-03-面向對象1-基礎-封裝繼承]
3.1. 碼雲代碼提交記錄
3.2 截圖PTA題集完成情況圖
需要有兩張圖(1. 排名。2.PTA提交列表)
3.3 統計本周完成的代碼量
周次 | 總代碼量 | 新增代碼量 | 總文件數 | 新增文件數 |
---|---|---|---|---|
1 | 73 | 73 | 2 | 2 |
2 | 281 | 281 | 9 | 9 |
3 | 908 | 908 | 16 | 16 |
4 | 1122 | 214 | 16 | 16 |
5 | 1557 | 435 | 32 | 11 |
6 | 2056 | 499 | 45 | 13 |