一、 本周學習總結
1.1 寫出你認為本周學習中比較重要的知識點關鍵詞
- 重載
- static關鍵字
- final關鍵字
- 繼承與多態
- 抽象類 abstract
1.2 嘗試使用思維導圖將這些關鍵詞組織起來。注:思維導圖一般不需要出現過多的字。
二、 書面作業
1. 面向對象設計(大作業1-該作業將作為以后其他作業的基礎,請務必完成)
1.1 講故事:用50字以上講一個你在網上商城購物或者在班級博客進行學習的故事。使用Markdown的加粗標記把關鍵名詞標注出來,使用語句塊標記把里面關鍵的動詞標注出來。講故事范例:見參考資料UML類圖中如何繪制類圖
為了更好的學習java,我們決定上某寶買一本java學習輔導書。首先登陸
某寶輸入賬號密碼,然后在搜索框輸入java學習輔導書,點擊搜索
。點擊進去,查看書籍的定價,再綜合比較之后決定買這本書,選擇數量三本加入
購物車。在購物車中選擇結算
。
1.2 找出系統中包含的類及其屬性、方法,類與類之間的關系,並繪制相應類圖。注意:不一定非要體現繼承關系。只要能將系統描述完整即可。一開始設計的時候不要考慮太多,不要出現太多的類,僅出現必要的類,完成最小功能即可。對商城購物系統建議只做購物車模塊。
- User類:
String account;//賬號
String password;//密碼
- Goods類:
String Name;//商品名稱
double Price;//價格
- ShoppingCar 類:
String Name;//商品名稱
int num;//數量
static double AllSum;//總和
double Price;//價格
方法:
- Login類
String Account //賬號
String Password //密碼
類圖如下:
1.3 使用Java代碼實現這個系統(不必很完善)。粘貼運行截圖與關鍵代碼。將來要在這個基礎上逐漸完善、擴展成一個完整的面向對象的系統。合作完成:2-3人一個小組。
(跟華輝一組)
測試數據:
Goods g1 = new Goods("A",3);
Goods g2 = new Goods("B",4);
Goods g3 = new Goods("C",1.1);
Goods g4 = new Goods("D",12.5);
Goods g5 = new Goods("E",3.1);
2. ManagerTest.zip代碼分析(繼承、多態)
2.1 簡述文件中表現出的繼承關系。哪些是共有方法,哪些是子類特有的屬性和方法?
答:
- 父類:Manager;子類:Employee。
- 共有方法:
getSalary()
、 - 子類特有的屬性和方法:屬性
bonus
、方法public void setBonus(double b)
2.2 文件第26行e.getSalary(),到底是調用Manager類的還是Employee類的getSalary方法?
答:Employee中的getSalary,因為e是Employee類型的,JVM會根據實際對象類型來調用相應的子類的代碼。
2.3 Manager類的構造函數使用super調用父類的構造函數實現了代碼復用,這樣有什么好處?為什么不把父類構造函數中的相關代碼復制粘貼到Manager的構造函數中,這樣看起來不是更直觀嗎?
答:
- 減少代碼的繁雜程度,提高代碼利用率。
- 用super也很直觀,主要還是復制粘貼這種做法太累贅了,代碼肯定還是要精簡易懂一些。
3. Object類中的toString與equals
3.1 編寫Fruit類,屬性String name。如果覆蓋其toString()方法,其父類中的toString方法的代碼就沒有了嗎?編寫Fruit的toString()方法,在該方法中要將調用父類的toString方法得到的字符串與自己特有的屬性name拼接起來,怎么編寫?(使用代碼展示)
答:父類的方法不會沒有
編寫代碼如下圖:
拼接只要把類中的語句return super.toString();
加上+name
就可以了
3.2 為Fruit類編寫equals方法覆蓋父類相應方法,功能為當兩個Fruit對象name相同時(忽略大小寫),返回true。(使用代碼證明你自己覆蓋的equals方法是正確的)
比較的三個水果名字分別為A、A、B
equals的代碼和比較的輸出結果如下圖:
3.3 完成3.2后,使用ArrayList
fruitList存儲多個fruit,添加時要求如果要添加的fruit對象在fruitList中已存在就不添加,不存在就添加。編寫相關測試代碼。並分析ArrayList的contains代碼與equals方法有何關系?
提示:直接使用ArrayList的contains方法實現判斷對象是否存在。
代碼如圖:
contains用到了equals()的方法來進行比較。
4. 實驗總結:
4.1 PTA編程題(形狀-繼承)。並回答:在本題中使用多態為編程帶來了什么好處。
JVM會根據實際對象類型來調用相應的代碼,比如getArea()
,針對父類寫了getArea(),對其子類同樣適用的同時,JVM會根據實際對象類型來調用相應的子類的getArea()
,這樣代碼更系統,更加清晰更好理解,而且體現了多態在繼承的基礎上的作用。
4.2 PTA編程題(覆蓋)。並回答:編寫eqauls方法是需要注意些什么?
重寫equals方法的要求:
1、自反性:對於任何非空引用x,x.equals(x)應該返回true。
2、對稱性:對於任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也應該返回true。
3、傳遞性:對於任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也應該返回true。
4、一致性:如果x和y引用的對象沒有發生變化,那么反復調用x.equals(y)應該返回同樣的結果。
5、非空性:對於任意非空引用x,x.equals(null)應該返回false。
總結:此題主要是定義PersonOverride
類並覆蓋其toString
與equals
方法
首先創造PersonOverride
類,並按題目要求寫出有參構造函數、無參構造函數
然后就是寫toString()
和equals
其余部分就是main了按照題目的給的
題目給的main的要求已經很詳細了,就不贅述了,按照要求一步一步寫就好了
一定認真看清題目,最后的要使用System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
輸出所有函數。
4.3 程序填空、函數題(1-3)。
6-1 提交一直出錯,沒有完成。
6-2 根據題目要求一步一步創建及輸出
輸入整數n,創建n個對象,放入同一個數組中。
如果輸入c,則new Computer(); //注意:Computer是系統中已有的類,無需自己編寫
如果輸入d,則根據隨后的輸入創建Double類型對象。
如果輸入i,則根據隨后的輸入創建Integer類型對象。...........等
6-3 主要還是equals的重寫,具體上面提及過了,注意五大要求。
三、碼雲及PTA
3.1. 碼雲代碼提交記錄
在碼雲的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然后搜索並截圖
3.2 截圖PTA題集完成情況圖
需要有兩張圖(1. 排名。2.PTA提交列表)
3.3 統計本周完成的代碼量
周次 | 行數 | 新增行數 | 文件數 | 新增文件數 |
---|---|---|---|---|
1 | 115 | 115 | 17 | 17 |
2 | 421 | 306 | 24 | 7 |
3 | 698 | 277 | 30 | 6 |
5 | 1085 | 387 | 38 | 8 |