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


1. 本周學習總結

1.1 嘗試使用思維導圖總結有關繼承的知識點。

1.2 使用常規方法總結其他上課內容。

 (1)繼承時子類將獲得父類的屬性與方法,並具有自身特有的屬性與方法。
(2)使用super還可以訪問父類被子類隱藏的同名的成員。
(3)創建子類時父類構造函數無論如何都會被調用。
(4)如果子類構造函數沒有顯式地調用父類的構造函數,則自動調用父類默認無參構造函數。
(5)當希望子類可以直接訪問父類成員或者希望被子類覆蓋的時候,使用protected進行聲明。
(6)沒有顯式指明繼承自哪個類,則默認繼承自Object類。

2. 書面作業

1. 注釋的應用

使用類的注釋與方法的注釋為前面編寫的類與方法進行注釋,並在Eclipse中查看。(截圖)

 類注釋的使用方法是:

/**

*(要注釋的內容)

*/


2. 面向對象設計(大作業1,非常重要)

2.1 將在網上商城購物或者在班級博客進行學習這一過程,描述成一個故事。(不得少於50字,參考QQ群中PPT的范例)

 雨季來臨,小薇進入網上商城打算選一把雨傘。在搜索欄輸入雨傘后,小薇在各種商品中選中了自己喜歡的款式,然后點擊進入了該商品的詳細界面,了解了該商品的各種屬性后,將該商品加入了購物車,隨后到購物車中,把以前加入購物車中沒有需要的的商品刪除后,將所要購買的商品進行了結算並付款。

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

3. ManagerTest.zip代碼分析

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

3.1 在本例中哪里體現了使用繼承實現代碼復用?回答時要具體到哪個方法、哪個屬性。

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

 子類調用父類方法應該使用super.getSalary();

3.3 文件第26行e.getSalary(),到底是調用Manager類的getSalary方法還是Employee類的getSalary方法。

 調用的是Employee類的getSalary方法;

3.4 Manager類的構造函數使用super調用父類的構造函數實現了代碼復用,你覺得這樣的有什么好處?為什么不把父類構造函數中的相關代碼復制粘貼到Manager的構造函數中,這樣看起來不是更直觀嗎?

 直接復制粘貼雖然看起來直觀,但是看起來復雜冗長;使用super調用父類的構造函數可以節省時間和空間;

4. Object類

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

 package java;

public class Main1 {
public static void main(String[] args){
System.out.println(new Fruit());
}
class Fruit{
private String name;
}
}
可得沒有extends時,直接繼承Object父類,並且調用toString方法;

4.2 如果為Fruit類添加了toString()方法,那么使用System.out.println(new Fruit());調用了新增的toString方法。那么其父類中的toString方法的代碼就沒有了嗎?如果同時想要復用其父類的toString方法,要怎么操作?(使用代碼演示)

 package java;

public class Main1 {
public static void main(String[] args){
System.out.println(new Fruit());
}
class Fruit{
private String name;
public String toString()
{
return super.toString();
}
}
}
父類中的toString方法的代碼還有;只需使用super關鍵字就可以調用父類的toString方法。

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

 public boolean equals(Object obj) { 
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Fruit other = (Fruit) obj;
if (name.equalsIgnoreCase(other.name))
return true;
}

4.4 在4.3的基礎上使用ArrayList

5. 代碼閱讀:PersonTest.java(abstract、多態)

5.1 畫出類的繼承關系

5.2 讀懂main函數,將自己推測的出代碼運行結果與真正運行結果進行比較。嘗試分析原因

 顯示:
Manager [bonus=12000.3, toString()=Employee [salary=90000.1, toString()=Person [name=Clark, adress=GE, phonenumber=111, email=111@mail.com, age=10, gender=mail]]]
Student [status=1, toString()=Person [name=wang, adress=110, phonenumber=15959, email=15959@163.com, age=18, gender=male]]
Employee [salary=1000.0, toString()=Person [name=zhang, adress=136, phonenumber=1360, email=1360@mail.com, age=21, gender=female]]
Programmer [allowance=50000.0, toString()=Employee [salary=100000.0, toString()=Person [name=Gates, adress=usa, phonenumber=911, email=911@com, age=59, gender=male]]]

5.3 子類中里面使用了super構造函數,作用是什么?如果將子類中的super構造函數去掉,行不行?

 使用super構造函數,作用是為了調用父類的構造函數;不行,如果將子類中的super構造函數去掉,則會自動調用父類默認無參構造函數。

5.4 PersonTest.java中的代碼哪里體現了多態?你覺得多態有什么好處?多態和繼承有什么關系嗎?

 多態對已存在代碼具有可替換性;多態對代碼具有可擴充性;
要實現多態的前提是要有繼承,要有父類引用指向子類對象;

多態好處的參考鏈接:http://wenku.baidu.com/link?url=rZJdofF6bnq_lzhrtooBqV9bRchIjZTss8ljeIUQDM9TkVwMACUhRIAkuvx8tpsLXVcq2MZgw8KUGTz5YJmqo3386ABAIJs2FjxAxAsEEtK

3. 碼雲代碼提交記錄

4. PTA實驗

 這次的代碼中用到了抽象類,通過繼承的關系來實現代碼的復用;
在父類中定義好抽象的方法之后,才能在子類當中注意定義;
在PTA上提交代碼真的真的真的要特別小心,不然分分鍾編譯失敗或者答案錯誤;
使用super還可以訪問父類被子類隱藏的同名的成員;
學過的知識有些難表達在代碼上,可能是學習的不夠深入,編寫代碼覺得特別困難,運用學過的東西也運用不起來;

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com