201521123100 《Java程序設計》第5周學習總結

1. 本週學習總結

1.1 嘗試使用思惟導圖總結有關多態與接口的知識點。

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

1.接口不是類,不能使用new進行實例化
2.使用instanceof運算符,能夠查看該對象是否實現了Comparable接口
3.接口能夠擴展extends
4.接口中能夠包含常
5.一個類能夠實現多個接口
參考資料:java

百度腦圖
XMind編程

2. 書面做業

Q1.代碼閱讀:Child壓縮包內源代碼
1.1 com.parent包中Child.java文件可否編譯經過?哪句會出現錯誤?試改正該錯誤。並分析輸出結果。
A:數組

package parent;

public class OutOfParentPackage{
    public static void showParentj(Parent p){
        System.out.println(p.j);
        System.out.println(p.geti());
        p.getj();
    }
}
class Parent{
    private int i=1;
    protected int j=2;
    protected int geti(){
        return i;
    }
    public void getj(){
        System.out.println(j);
    }
}
class Other{
    public static void showParentj(Parent p){
        System.out.println(p.j);
        System.out.println(p.geti());
    }
    
}
public class Child extends Parent{
    public static void main(String[] args){
        Parent p = new Parent();
        Child c = new Child();
        c.getParenti();
        c.getParentj();
        Other.showParentj(p);
        
    }
    public void getParenti(){
        System.out.println(i);
    }
    public void getParentj(){
        System.out.println(super.j);
        System.out.println(j);
        System.out.println(geti());
        System.out.println(super.geti());
    }
}

不能經過編譯;這一句System.out.println(i);會出錯;應將private改成protected;結果以下
數據結構

1.2 另一個包中的OutOfParentPackage.java,可否編譯經過?提示什麼錯誤?分析緣由。
A:不能經過編譯;提示的錯誤是The type Parent is not visible;緣由是Parent類不是public的學習

Q2.abstract進階:閱讀GuessGame抽象類的設計與使用源代碼
2.1 Guess改造前代碼很簡單,而改造後的代碼使用了抽象類、抽象方法看起來很複雜,那這樣的改造到底有什麼好處呢?
A:在被改造以前,整個代碼未使用抽象類,因此輸入輸出都由控制檯控制,然而在改造以後,在GuessGame類中,輸入輸出均是抽象類,因此能夠在控制檯輸入輸出也能夠在圖形界面輸出
2.2 若是想將該遊戲改形成圖形界面,應該進行一些什麼操做?
A:先導入java.swing.*包,而後調用包裏的方法開始界面設計;接着設計一個用來猜數字的圖形界面的類而且繼承Guess中的抽象類;最後重寫抽象類當中的抽象方法
2.3 結合該例子,你以爲何時應該使用abstract?
A:包含抽象方法的類叫作抽象類,就須要使用abstract,abstract修飾方法就是要求其子類覆蓋(實現)這個方法。調用時能夠以多態方式調用子類覆蓋(實現)後的方法,也就是說抽象方法必須在其子類中實現,除非子類自己也是抽象類。我以爲抽象類像是一個模板,有了抽象類,就能讓不少方法在此基礎上不斷延伸和拓展,因此當有多個不一樣的方法來執行同一種功能時能夠用上abstract,這樣會方便些
2.4 重要:在這個例子中,變化的是什麼,不變的是什麼?嘗試結合abstract、繼承等概念進行說明。
A:在這個例子中,變化的是輸入的方法,能夠採用不一樣的方法輸入,如從控制檯輸入、從對話框圖形界面輸入等等。不變的是抽象方法,它可使用不一樣方法的輸入、輸出,完成一個猜數的遊戲。咱們根據需求的不一樣來具體決定到底使用何種輸入輸出方法。這個類是抽象的,即沒有具體的輸入、輸出的的方法這個遊戲就沒有辦法進行。因此咱們要有具體的方法來實現,而具體的實現要經過繼承來完成。由於抽象類的抽象方法是沒有具體定義的,也就是說一個抽象類,沒有別的類去繼承它,就很沒有意義。因此咱們要有不是抽象類去實現抽象類的抽象方法。這個實現的過程就是繼承,繼承抽象類的方法,而後經過複寫的形式來具體實現方法的細節
Q3.Comparable與Comparator
3.1 描述Comparable接口的用途。爲何某個類實現了Comparable接口就能夠直接使用Arrays.sort對其進行排序?
A:Comparable接口將比較代碼嵌入自身類中。在開發中咱們可能會遇到須要將一些對象有序的放入到集合中,這時候咱們只須要讓類實現java.lang.Comparable 接 口。由於Comparable接口只有 public int compareTo(T o);一個方法,因此覆蓋compareTo這個方法便可實現自動排序,這樣就不用本身寫一個排序的方法
3.2 有了Comparable接口爲何還須要Comparator接口呢?
A:Comparable接口和Comparator接口,兩個都是用來實現集合中元素的比較、排序的。Comparable是在集合內部定義的方法實現的排序,Comparator是在集合外部實現的排序,Comparable接口是一個對象自己已經支持自比較所須要實現的接口。Comparator是一個另寫一個外部類來實現的比較的接口
Q4.面向接口案例分析
閱讀Case-StudentDao.zip案例
4.1 畫出類關係圖,描述每一個類與接口的做用。
設計

4.2 StudenDaoListImpl與StudentDaoArrayImpl有何區別?
A:StudenDaoListImpl使用動態容器ArrayList,而StudentDaoArrayImpl使用的是固定了大小爲80的數組
Q5.什麼是面向接口編程?面向接口編程的好處是什麼?
A: 面向接口編程關注的是不一樣的類是否有共同的方法,不關心對象自己。題目3用到Comparable和Comparator兩個接口,經過這兩個接口,咱們能夠很方便地對本身定義的類進行比較,從而調用Arrays裏面已經寫好的sort()方法來排序。這個過程至關於面向接口編程。題目4也是如此,在Test類裏面,咱們只要關心數據究竟是以何種數據結構來存放,不須要管具體的底層實現。用列表,數組均可以實現寫入學生數據、讀取學生數據和遍歷學生信息的操做。這樣一來就很方便,就如計算機的UAB接口,不論是要接U盤仍是手機類的外設,只關心接口一致就能夠,至於內容就無論。這樣就無須知道對象是用什麼類來實現的,只須知道定義接口的抽象類。3d

3. 碼雲上代碼提交記錄及PTA實驗總結

題目集:jmu-Java-04-面向對象2-進階-多態接口內部類code

3.1. 碼雲代碼提交記錄

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

3.2. PTA實驗總結

經過實驗熟練的掌握了Comparable接口和編寫comparaTo方法。blog

相關文章
相關標籤/搜索