201521123068《Java程序設計》第4周學習總結

1. 本週學習總結
1.1 嘗試使用思惟導圖總結有關繼承的知識點。

點擊查看->高清腦圖
1.2 使用常規方法總結其餘上課內容。java

答:學習繼承與多態的知識,瞭解它們之間的關係;super、extend、final關鍵字;繼承運用於實際生活中,能夠解決諸如網上購物問題。

2. 書面做業編程

  1. 註釋的應用
    使用類的註釋與方法的註釋爲前面編寫的類與方法進行註釋,並在Eclipse中查看。(截圖)
    eg1.類的註釋:

    ege2.方法的註釋:
  2. 面向對象設計(大做業1,很是重要)
    2.1 將在網上商城購物或者在班級博客進行學習這一過程,描述成一個故事。(不得少於50字,參考QQ羣中PPT的範例)安全

    網上商城購物:「歡歡!據說噹噹又滿199立減100呢,咱們能夠買心心念唸的書啦,咱們快來湊吧!"四目相聚,點擊360安全軟件,在搜索欄輸入噹噹網,點擊噹噹官網(這不廢話哈哈哈)。在噹噹的搜索欄中點擊所有分類,分類包含圖書、電子書、服裝、etc,咱們只需選擇圖書一項即可。在歷史中找到《世說新語》一書,有不少不同的啊,那可要好好選擇叻。選好了以後,點擊加入購物車,我只需一本則不用再多動做。此時結算處顯示22.4,沒滿199啊,那就再多加些書進購物車,數量累加。待所有書籍選擇完畢,點擊結算,系統立減100以後付錢啥的你懂啦~good job!ide

2.2 經過這個故事咱們能發現誰在用這個系統,系統中包含的類及其屬性方法,類與類之間的關係。嘗試找到這些類與屬性,並使用思惟導圖描述類、屬性、方法及類與類之間的關係。

查看腦圖點擊->噹噹商城系統函數

注:該系統使用者爲噹噹商城用戶,即腦圖第一級,不一樣級別依次表明類、屬性以及方法,類與類之間是相互聯繫、密不可分的關係。

2.3 嘗試使用Java代碼實現故事中描述的這一過程(沒必要很完善),未來要在這個基礎上逐漸完善、擴展成一個完整的面向對象的系統。(可選:加分)學習

  1. ManagerTest.zip代碼分析
    分析ManagerTest.zip中的代碼,回答幾個問題:
    3.1 在本例中哪裏體現了使用繼承實現代碼複用?回答時要具體到哪一個方法、哪一個屬性。測試

    方法: public Employee(String n, double s, int year, int month, int day);
    public Manager(String n, double s, int year, int month, int day);
    屬性: name、salary、hireDayui

3.2 Employee類及其子類Manager都有getSalary方法,那怎麼區分這兩個方法呢?this

答:調用父類方法應該使用super.getSalary(),並且使用super還能夠訪問父類被子類隱藏的同名的成員。

3.3 文件第26行e.getSalary(),究竟是調用Manager類的getSalary方法仍是Employee類的getSalary方法。設計

答:e.getSalary()調用Employee類的getSalary方法。

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

答:好處是避免了代碼的重複,簡單,重複在代碼設計上,是很差的信號;把父類構造函數中的相關代碼複製粘貼到Manager的構造函數中,致使對代碼進行修改時就須要修改許多的類,將會是一項龐大繁瑣的工程。

4.Object類
4.1 編寫一個Fruit類及屬性String name,如沒有extends自任何類。使用System.out.println(new Fruit());是調用Fruit的什麼方法呢?該方法的代碼是從哪來的?嘗試分析這些代碼實現了什麼功能?

答:使用`System.out.println(new Fruit());`是調用了Fruit的to String方法;該方法的代碼是從Object類裏面來的。

4.2 若是爲Fruit類添加了toString()方法,那麼使用System.out.println(new Fruit());調用了新增的toString方法。那麼其父類中的toString方法的代碼就沒有了嗎?若是同時想要複用其父類的toString方法,要怎麼操做?(使用代碼演示)

答:調用了新增的toString方法,其父類中的toString方法的代碼仍舊存在;複用父類的toString方法,能夠調用super關鍵字。
public String toString()
{
return super.toString();
}

4.3 Fruit類還繼承了Object類的eqauls方法。嘗試分析其功能?本身編寫一個equals方法覆蓋父類的相應方法,功能爲當兩個Fruit對象name相同時(忽略大小寫),那麼返回true。(使用代碼證實你本身覆蓋的eqauls方法是正確的)

答:`Object`類的`eqauls`方法,對兩個對象的地址值進行的比較(即比較引用是否相同),String、Math等封裝類在使用equals()方法時,已經覆蓋了object類的equals()方法。
    代碼以下(利用source自動生成):
     @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Fruit other = (Fruit) obj;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

4.4 在4.3的基礎上使用ArrayList<Fruit> fruitList存儲多個fruit,要求若是fruitList中已有的fruit就再也不添加,沒有的就添加進去。請編寫相關測試代碼。並分析ArrayList的contatins方法是如何實現其功能的?

這題暫未解決。

5.代碼閱讀:PersonTest.java(abstract、多態)
5.1 畫出類的繼承關係

5.2 讀懂main函數,將本身推測的出代碼運行結果與真正運行結果進行比較。嘗試分析緣由

答:
for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++)
                if (peoples[j].getAge() > peoples[j + 1].getAge()) {
                    Person temp = peoples[j];
                    peoples[j] = peoples[j + 1];
                    peoples[j + 1] = temp;
                }
        }
推測與實際:for循環中的冒泡排序將四個對象的年齡分別按從小到大排序而且輸出。

5.3 子類中裏面使用了super構造函數,做用是什麼?若是將子類中的super構造函數去掉,行不行?

答:子類的構造函數中,super()語句表明調用了父類的構造函數,訪問父類中的空參數構造函數;除非父類中沒有空參數的構造函數,那麼子類構造函數的第一行必須顯式調用父類的構造函數super(),所以不可將此去掉。

5.4 PersonTest.java中的代碼哪裏體現了多態?你以爲多態有什麼好處?多態和繼承有什麼關係嗎?

答:體如今不一樣類對toString方法的不一樣調用:
    @Override
    public String toString() {
    return "Student [status=" + status + ", toString()=" + super.toString() + "]";}
   @Override
    public String toString() {
    return "Employee [salary=" + salary + ", toString()=" + super.toString() + "]";}
    多態的好處:eg.在Object類中的equals(Objectobj)方法中,參數是個Object類型的參數.由於Object是Java中全部類的基類,可是才傳入參數的時候,能夠傳入任何一個類的對象。
    多態和繼承的關係:網上看到一句話就是說——「編譯時看父類,運行時看子類」,應該是這個理。

5.5 查看Manager的hashCode源代碼。並回答,編寫子類的hashCode方法須要注意什麼?
Manager的hashCode源代碼:

答:編寫子類的hashCode方法須要注意,hashCode是用來在散列存儲結構中肯定對象存儲的位置的;若是兩個對象相同,即調用equals方法返回的是true,那麼它倆的hashCode值也要相同;若是equals方法被改寫了,那麼hashCode方法也儘可能要改寫,而且產生hashCode的對象也要和equals的對象保持一致。(摘自簡書)

3.碼雲代碼提交記錄

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

4. PTA實驗

  • 題目集:jmu-Java-03-面向對象1-基礎-封裝繼承 中的
    函數(4-1, 4-2, 4-3,4-4較難選作)
    編程(5-4, 5-5, 5-6)

  • 對super、extend、final關鍵字的瞭解與使用
  • 類的註釋與方法的註釋要區分

相關文章
相關標籤/搜索