201621123090《Java程序設計》第四周做業

1. 本週學習總結

1.1 寫出你認爲本週學習中比較重要的知識點關鍵詞

  • 繼承,多態,重載,抽象類,objectjavascript

    1.2 嘗試使用思惟導圖將這些關鍵詞組織起來。注:思惟導圖通常不須要出現過多的字。

1.3 可選:使用常規方法總結其餘上課內容

  • 繼承:面向父類編程。
  • 多態:根據實際對象類型來調用相應的方法。

    2.書面做業

    1. 面向對象設計(大做業1-該做業將做爲之後其餘做業的基礎,請務必完成)

    1.1 講故事:用50字以上講一個你在網上商城購物或者在班級博客進行學習的故事。使用Markdown的加粗標記把關鍵名詞標註出來,使用語句塊標記把裏面關鍵的動詞標註出來。講故事範例:見參考資料UML類圖中如何繪製類圖

  • 某寶上`搜索`(public void Find(String name))java學習筆記,而後`顯示`(public String toString())搜索結果,通過比較或者篩選得出`正品`附帶光盤和網課學習視頻的66.66元的`商品`,`選擇`購買`數量`加入**購物車**,確認收貨地址,會覈對**聯繫人**,**聯繫方式**,**聯繫地址**,而後`付款`(public void Pay(String name)),等待收貨,五星好評❤❤❤❤❤。

    1.2 找出系統中包含的類及其屬性、方法,類與類之間的關係,並繪製相應類圖。注意:不必定非要體現繼承關係。只要能將系統描述完整便可。一開始設計的時候不要考慮太多,不要出現太多的類,僅出現必要的類,完成最小功能便可。對商城購物系統建議只作購物車模塊。

  • 1.商品是一個「大」的類,商品的價格等都是描述這個累的是這個類的屬性。
  • 2.用戶也是一個「大」類,登陸,搜索,查看,篩選,購買,都是他的子類。

.3 使用Java代碼實現這個系統(沒必要很完善)。粘貼運行截圖與關鍵代碼。未來要在這個基礎上逐漸完善、擴展成一個完整的面向對象的系統。合做完成:2-3人一個小組。

class Goods {
        private String name;
        private double price;
    @Override
        public String toString() {      //輸出商品信息
            return "Goods [name=" + name + ", price=" + price + "]";
        public String getName(){
                return name;
    }
         public void setName(){
                this.name=name;
        }
         public double getPrice(){
                return price;
    }
         public void setPrice(double price){
                this.price=price;
        }
         
    }
   
}
class jieSuan{
    private String name;
    private int phoneNumber;
    private  String address;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPhoneNumber() {
        return phoneNumber;
    }
    public void setPhoneNumber(int phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    
}

2. ManagerTest.zip代碼分析(繼承、多態)

分析ManagerTest.zip中的代碼,回答幾個問題:

2.1 簡述文件中表現出的繼承關係。哪些是共有方法,哪些是子類特有的屬性和方法?

  • 共有方法`public Employee(String n, double s, int year, int month, int day)`
    public String getName()
    public double getSalary()
    public Date getHireDay()
    public void raiseSalary(double byPercent)

子類特有屬性和方法: private double bonusvoid setBonus(double b)Manager(String n, double s, int year, int month, int day)double getSalary()
private double bonuspublic void setBonus(double b)java

2.2.2 文件第26行e.getSalary(),究竟是調用Manager類的仍是Employee類的getSalary方法?

  • jvm會根據實際對象類型來調用方法,調用的應該是Employee類的getSalary方法。

    2.2.3 Manager類的構造函數使用super調用父類的構造函數實現了代碼複用,這樣有什麼好處?爲何不把父類構造函數中的相關代碼複製粘貼到Manager的構造函數中,這樣看起來不是更直觀嗎?

  • 利:新的子類能夠調用父類的方法,使得複用的時候更加簡單,也能體現二者關係,直接複製黏貼容易形成冗餘。

    3. Object類中的toString與equals

    3.1 編寫Fruit類,屬性String name。若是覆蓋其toString()方法,其父類中的toString方法的代碼就沒有了嗎?編寫Fruit的toString()方法,在該方法中要將調用父類的toString方法獲得的字符串與本身特有的屬性name拼接起來,怎麼編寫?(使用代碼展現)

class Fruit{
    String name;
    public Fruit(String str) {
        this.name=str;
    }
    public String toString() {
        return name + " " + super.toString();
    }
}
public class Main {
    public static void main(String[] args) {
        Fruit a= new Fruit("xyz");
        System.out.println(a);
    }
}

3.2 爲Fruit類編寫equals方法覆蓋父類相應方法,功能爲當兩個Fruit對象name相同時(忽略大小寫),返回true。(使用代碼證實你本身覆蓋的equals方法是正確的)

class Fruit{
    String name;
    public Fruit(String str) {
        this.name=str;
    }
    public String toString() {
        return name + " " + super.toString();
    }
    public boolean equals(Fruit s) {
        return (this.name == s.name);
    }
}
public class Main {
    public static void main(String[] args) {
        Fruita1 = new Fruit("xyz");
        Fruit a2 = new Fruit("xyz");
        System.out.println(f1.equals(a2));
    }
}

3.3 完成3.2後,使用ArrayList

4. 實驗總結:

4.1 PTA編程題(形狀-繼承)。並回答:在本題中使用多態爲編程帶來了什麼好處。

  • Circle和Rectangle繼承了Shape,sumAllArea()和sumAllPerimeter()方法放在主類中,定義抽象類時,注意關鍵字abstract不要丟了。
  • 好處:子類屬於父類,能更靈活對待類的差別;且不用單獨寫對應的代碼,更爲簡便

    4.2 PTA編程題(覆蓋)。並回答:編寫eqauls方法是須要注意些什麼?

  • 總結:ArrayList操做動態變化很便捷,例如 此題用了ArrayList的contains方法判斷了person是否存在。

    4.3 程序填空、函數題(1-3)

  • 程序填空:利用this來調用有參構造函數,覆蓋toString。
  • 函數1:題目要求要用編寫toString要用到父類,因此用 super關鍵字調用父類的toString()。
  • 函數2:注意題目要倒序輸出,要先把全部對象放到數組中。
  • 函數3:注意當值爲null的狀況,不能忽略。

    3. 碼雲及PTA

    題目集:[jmu-Java-03-面向對象1-基礎-封裝繼承]

    3.1. 碼雲代碼提交記錄

    在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖

3.2 截圖PTA題集完成狀況圖

本週完成(形狀-繼承,覆蓋)

須要有兩張圖(1. 排名。2.PTA提交列表)

3.3 統計本週完成的代碼量

周次 總行數 新增行數 總文件數 新增文件數
1 73 73 3 3
2 468 468 91 9
3 411 411 27 9
4 503 503 42 13
相關文章
相關標籤/搜索