201621123049《java程序設計》第四周學習總結


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

掃描下方二維碼關注我公眾號

或者微信搜索:凡哥共享


免責聲明!

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



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