1. 本周學習總結
1.1 寫出你認為本周學習中比較重要的知識點關鍵詞
繼承 類型轉換 覆蓋
1.2 嘗試使用思維導圖將這些關鍵詞組織起來。注:思維導圖一般不需要出現過多的字。
2. 書面作業
1. 面向對象設計(大作業1-該作業將作為以后其他作業的基礎,請務必完成)
1.1 講故事:用50字以上講一個你在網上商城購物或者在班級博客進行學習的故事。使用Markdown的加粗標記把關鍵名詞標注出來,使用語句塊標記把里面關鍵的動詞標注出來。講故事范例:見參考資料UML類圖中如何繪制類圖
某天,小京打開
京東網站並登錄
,然后在搜索框里搜索
楚辭 ,猶豫了一下,最終還是決定加入
購物車,實現下單結算
1.2 找出系統中包含的類及其屬性、方法,類與類之間的關系,並繪制相應類圖。注意:不一定非要體現繼承關系。只要能將系統描述完整即可。一開始設計的時候不要考慮太多,不要出現太多的類,僅出現必要的類,完成最小功能即可。對商城購物系統建議只做購物車模塊。
1.3 使用Java代碼實現這個系統(不必很完善)。粘貼運行截圖與關鍵代碼。將來要在這個基礎上逐漸完善、擴展成一個完整的面向對象的系統。合作完成:2-3人一個小組。
package shopping;
import java.util.ArrayList;
import java.util.concurrent.BlockingDeque;
public class ShoppingCart {
class Item {
private Goods goods;
private int num;
}
private ArrayList<Item> items = new ArrayList<Item>();
private double totalPrice;
public void add() {
}
public void delete() {
}
public void purchase() {
}
public void clear() {
}
}
可選:團隊協作可使用git與碼雲。在碼雲中新建項目。所有隊員都應在碼雲中該項目下均應有有提交記錄。截圖你們的提交記錄。
2. ManagerTest.zip代碼分析(繼承、多態)
分析ManagerTest.zip中的代碼,回答幾個問題:
2.1 簡述文件中表現出的繼承關系。哪些是共有方法,哪些是子類特有的屬性和方法?
共有方法
public String getName()
public double getSalary()
public Date getHireDay()
public void raiseSalary(double byPercent)
子類特有的屬性和方法:
private double bonus;
public void setBonus(double b)
2.2 文件第26行e.getSalary(),到底是調用Manager類的還是Employee類的getSalary方法?
調用的是Employee類的getSalary方法。
當子類和父類相同時,子類能用super關鍵字來訪問,即super.getSalary()
2.3 Manager類的構造函數使用super調用父類的構造函數實現了代碼復用,這樣有什么好處?為什么不把父類構造函數中的相關代碼復制粘貼到Manager的構造函數中,這樣看起來不是更直觀嗎?
減少重復代碼,節約時間
會導致冗長和重復閱讀
3. Object類中的toString與equals
3.1 編寫Fruit類,屬性String name。如果覆蓋其toString()方法,其父類中的toString方法的代碼就沒有了嗎?編寫Fruit的toString()方法,在該方法中要將調用父類的toString方法得到的字符串與自己特有的屬性name拼接起來,怎么編寫?
不會沒有,用super關鍵字來訪問,super.toString()
3.2 為Fruit類編寫equals方法覆蓋父類相應方法,功能為當兩個Fruit對象name相同時(忽略大小寫),返回true。(使用代碼證明你自己覆蓋的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。
3.3 完成3.2后,使用ArrayList
fruitList存儲多個fruit,添加時要求如果要添加的fruit對象在fruitList中已存在就不添加,不存在就添加。編寫相關測試代碼。並分析ArrayList的contains代碼與equals方法有何關系?
提示:直接使用ArrayList的contains方法實現判斷對象是否存在。
public class FFruit {
public static void main(String[] args) {
ArrayList<Fruit> fruitList = new ArrayList<Fruit>();
Fruit[] fruit = new Fruit[5];
fruit[0] = new Fruit("banana");
fruit[1] = new Fruit("Banana");
fruit[2] = new Fruit("apple");
fruit[3] = new Fruit("Apple");
fruit[4] = new Fruit("orange");
for(int i=0;i<fruit.length;i++){
if(fruitList.contains(fruit[i])==false)
fruitList.add(fruit[i]);
}
for(int i=0;i<fruitList.size();i++)
System.out.println(fruitList.get(i));
}
}
4. 實驗總結:
4.1 PTA編程題(形狀-繼承)。並回答:在本題中使用多態為編程帶來了什么好處。
一個函數,不同體現
4.2 PTA編程題(覆蓋)。並回答:編寫eqauls方法是需要注意些什么?
考慮特殊情況值為空的情況
4.3 程序填空、函數題(1-3)。
函數題1: 主要是主要是toString()
方法的重寫
函數題2:要注意的是最后數組的輸出要是倒序的。
函數題3:重寫equals()
方法
3. 碼雲及PTA
題目集:[jmu-Java-03-面向對象1-基礎-封裝繼承]
3.1. 碼雲代碼提交記錄
在碼雲的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然后搜索並截圖
3.2 截圖PTA題集完成情況圖
本周完成(形狀-繼承,覆蓋)
需要有兩張圖(1. 排名。2.PTA提交列表)
3.3 統計本周完成的代碼量
周次 | 總代碼量 | 新增代碼量 | 總文件數 | 新增文件數 |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 |
3 | 484 | 484 | 3 | 3 |
4 | 910 | 426 | 7 | 4 |