week05-繼承、多態、抽象類與接口

1. 本週學習總結

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

接口的實現,接口的定義,繼承與接口的區別html

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

2. 書面做業

1.面向對象設計大做業(團隊項目,2-3人)

內容:繼續完善上次的大做業。
注意: 再過幾回課要講Java圖形界面編程,到時候要將該系統升級爲圖形界面。系統的業務邏輯部分應該變化不大,變化較大的地方的是輸入與輸出部分。編碼的時候,請不要將處理輸入(System.in)與輸出(System.out)的代碼與某個業務處理方法綁死。java

做業提交結構以下:git

1.1 項目簡介表格:

學生 負責任務 博客地址
張雨陽 購物車類,登陸類 博客地址
李鐸 商品類,用戶類 博客地址

項目碼雲地址(點擊後要求可直接跳到該項目首頁)。
碼雲
把兩我的的類上傳到同一個項目中還不會,因此我先完整的傳到本身的碼雲中編程

1.2系統經常使用功能框架圖

1.3 系統整體類圖

類圖繪製參考資料:
數組

1.4 購物車、商品、系統關鍵代碼截圖(主要截取本身負責的部分)


1.5 其餘:跟上次的系統比較,系統的設計等有何修改。其餘感想。

上次沒有實現用戶的註冊與登陸,此次加入了登陸類購物車類等功能,因爲我能力不強,因此大部分靠合做同窗,謝謝張雨陽大佬框架

因爲對類之間關係不是很理解,可是有一個想法:能不能把登陸這個功能寫到用戶類中,而不用再寫一個登陸類ide

2. abstract:閱讀GuessGame抽象類的設計與使用源代碼

2.1 Guess改造前代碼很簡單,而改造後的代碼使用了抽象類、抽象方法,看起來更復雜,這樣的改造到底有什麼好處呢?

改造前使用scanner,在操做上有許多方法能夠直接用,比較方便,但只能從控制檯得到輸入,不靈活。函數

改造後使用抽象類和抽象方法,抽象類不能實例化對象,因此必需要有子類來實現它以後才能使用。
這樣就能夠把一些具備相同屬性和方法的組件進行抽象,這樣更有利於代碼和程序的維護。學習

2.2 GuessGame(改造後).java中有抽象方法與非抽象方法,你以爲抽象類中什麼樣的方法應該聲明爲abstract,什麼方法不須要聲明爲abstract直接實現便可。

抽象類好處在於能夠有多種子類的實現方法,好比以前PTA上的圖形類,不一樣的子類對應有不一樣的求面積方法,
實現方法在父類中不具體的就適合聲明爲abstract,而方法細節已經能夠在類中實現的就不須要聲明爲abstractthis

2.3 重要:在這個例子中,變化的是什麼,不變的是什麼?嘗試結合abstract等概念進行說明。

變化的是輸入輸出的方法,不變的是程序始終實現了猜數字這一功能,abstract可讓輸入輸出的方法變得更加多樣

3. Comparable與Comparator

3.1 結合PTA 7-1中你的代碼說明,爲何某個類實現了Comparable接口,就能夠直接使用Arrays.sort對該類型的數組進行排序?

我對於接口的理解相似於抽象類中的父類,有接口(繼承)就可使用接口對應的方法(父類方法聲明)

class PersonSortable implements Comparable<PersonSortable>
PersonSoetable實現了compareable接口,arrays繼承自object超級父類且也有相同的compareable接口,就可使用arrays.sort方法

不過在具體實現代碼上可能須要修改,因爲題目要求對年齡進行排序,因此在compareTo方法體中須要修改爲age斷定大小:
public int compareTo(PersonSortable o){
if(this.name.compareTo(o.name)==0){
if(this.age==o.age)
return 0;
if(this.age>o.age)
return 1;
if(this.age<o.age)
return -1;
}

3.2 結合PTA 7-2 中你的代碼說明,有了Comparable接口爲何還須要Comparator接口呢?

Arrays.sort能夠對全部實現Comparable的對象進行排序。但若是有多種排序需求,若有時候需對name
進行降序排序,有時候只須要對年齡進行排序。使用Comparable沒法知足這樣的需求。能夠編寫不一樣的
Comparator來知足多樣的排序需求。以下就是對年齡和名字進行的排序
class AgeComparator implements Comparator {

@Override
public int compare(PersonSortable1 o1, PersonSortable1 o2) {
    int n=0;
    if(o1.getAge()>o2.getAge())
        n=1;
    else if(o1.getAge()==o2.getAge())
        n=0;
    else if(o1.getAge()<o2.getAge())
        n=-1;
    return n;
}

class NameComparator implements Comparator {

public int compare(PersonSortable1 o1, PersonSortable1 o2) {
    // TODO Auto-generated method stub
    return o1.getName().compareTo(o2.getName());
}

3.3 之前的做業Shape, Rectangle,Cirlce中,Shape類中什麼方法應聲明爲abstract?說出緣由。

像是計算周長面積這類的方法就須要聲明爲abstract,雖然都是形狀類,但圓形和正方形的周長面積的計算方法
顯然不一樣,在父類中就沒法具體實現,須要在子類中實現

3.4 有不少Shape類型對象如Rectangle、Circle。但願使用Arrays.sort對他們進行排序,請寫出相應代碼。並簡述應在哪一個類上實現Comparable接口比較好?

在父類實現比較好,父類一旦修改子類也會一塊兒修改,在父類實現一個藉口,子類也會繼承同接口,代碼量更少

3.5 以3.4你編寫的代碼爲例,簡述面向Comparable接口編程、面向父類編程的好處。(注意:必定要結合本身編寫的代碼)

面向Comparable接口編程只須要在實現接口的前提下根據比較對象的不一樣重寫代碼就能很方便的對不一樣對象進行排序
面向父類編程好處是父類只須要方法名,具體方法體在子類中再作區別實現,兩種方法都能提升代碼的複用率

4. 面向接口案例分析

4.閱讀Case-StudentDao.zip案例

4.1 a.畫出類關係圖。b.StudentDao接口有什麼用?

定義了三種抽象方法:顯示學生信息,讀取學生信息,寫入學生信息。
用於爲不一樣的存儲方法定義共有方法,便於後期的實現。

4.2 StudenDaoListImpl與StudentDaoArrayImpl有何共同之處?有何區別?

共同處:

1.都存儲學生信息

2.都實現了StudentDao接口

3.實現了其中的抽象方法。

不一樣:

StudenDaoListImpl使用ArrayList來存儲學生信息

StudentDaoArrayImpl則是使用數組來存儲學生信息。

4.3 結合Test.java中的main函數,簡述面向接口編程的好處。

以題目四爲例,學生信息的存儲方式,能夠是數組儲存也能夠是arraylist儲存,經過建立不一樣的對象來實現不一樣的
存儲方法,其實現的功能都是同樣的,將兩種方法抽象成一個接口,根據類的不一樣來決定實現方法

5. 什麼是面向接口編程?面向接口編程的好處是什麼?

面向接口編程就是指系統中的類和模塊之間的交互由接口完成。

好處:

經過接口中的抽象方法,咱們能夠應用在更多的地方,對不一樣的對象可使用不一樣的實現方法來實現。

提升了編程的靈活性。。

經過接口可使系統的獨立性加強,便於後期的維護和擴展。

3. 碼雲及PTA

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

3.1. 碼雲代碼提交記錄

3.2 截圖PTA題集完成狀況圖

本週完成(形狀-繼承,覆蓋)
須要有兩張圖(1. 排名。2.PTA提交列表)
3.3 統計本週完成的代碼量

周次 總代碼量 新增代碼量 總文件數 新增文件數
1 73 73 2 2
2 281 281 9 9
3 908 908 16 16
4 1122 214 16 16
5 1557 435 32 11
相關文章
相關標籤/搜索