作業06-接口、內部類


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 = new Comparator () { @Override public int compare(Shape o1, Shape o2) { //你的代碼 } };

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM