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

1. 本週學習總結

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

2. 書面做業

1.1 com.parent包中Child.java文件可否編譯經過?哪句會出現錯誤?試改正該錯誤。並分析輸出結果。

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);這一句會出現錯誤。由於父類的i爲private修飾,因此父類的i對於子類來講是不可見的。要將父類中的i的private改成protected

第一個1是由c.getParenti();語句調用,接下來的2,2,1,1,是由 c.getParentj();語句調用,接下來的2,1,是由Other.showParentj(p);語句調用。

1.2 另一個包中的OutOfParentPackage.java,可否編譯經過?提示什麼錯誤?分析緣由。如何更改才能使之正常編譯?(寫不出來正確答案沒關係,但請必定寫出思考過程)

不能編譯經過,提示的錯誤是The type Parent is not visible.錯誤的緣由在於Parent類不是public的。要將Parent類改成public才能使之正常編譯。

(2)abstract進階:閱讀GuessGame抽象類的設計與使用源代碼

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

這樣有利於程序的可擴展性,在被改造以前,整個代碼未使用抽象類,因此輸入輸出都由控制檯控制,然而在改造以後既能夠在控制檯輸出,也可使用對話框圖形界面等輸入。

2.2 若是想將該遊戲改形成圖形界面,應該進行一些什麼操做?

設計一個圖形界面的類去繼承前面所提到的抽象類,至少要有三部分來實現,一個輸入,一個提示,一個判斷大小。

2.3 結合該例子,你以爲何時應該使用abstract?

分析問題時僅有大致的框架,抽象方法只有聲明,沒有具體的方法和定義,這就須要用到abstract類。抽象方法能夠被不一樣的的類以不一樣的方式去操縱,就能讓不少方法在此基礎上不斷延伸和拓展。

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

變化的是輸入方法,沒有變化的是抽象類。一個類能夠繼承一個抽象類,可是能夠繼承多個接口。接口必須所有實現,抽象類只實現抽象方法,繼承類能夠不實現。抽象類不能被實例化,只能被繼承象類的做用是普通類沒法替代的,抽象類的做用主要是提供一種模版。

(3)Comparable與Comparator

3.1 描述Comparable接口的用途。爲何某個類實現了Comparable接口就能夠直接使用Arrays.sort對其進行排序?

Comparable接口對實現他的每一個對象進行總體的排序。讓待排序對象所在的類實現Comparable接口,實現此接口的對象列表(和數組)能夠經過Arrays.sort進行自動排序。並重寫Comparable接口中的compareTo()方法。

3.2 有了Comparable接口爲何還須要Comparator接口呢?

兩個接口都是用來實現集合中元素的比較、排序的。Comparable是在集合內部定義的方法實現的排序,Comparator是在集合外部實現的排序,Comparable接口賦予了類可比較的特性,而Comparator接口實現了一個能夠比較兩個屬於某一特定類的專用比較類。

(4)面向接口案例分析,閱讀Case-StudentDao.zip案例

4.1 畫出類關係圖,描述每一個類與接口的做用。

4.2 StudenDaoListImpl與StudentDaoArrayImpl有何區別?

StudenDaoListImpl經過ArrayList實現,StudentDaoArrayImpl經過數組實現

(5)什麼是面向接口編程?面向接口編程的好處是什麼?結合題目3與4(Test.java的代碼)討論分析。不要百度原封不動照搬!

在一個面向對象的系統中,系統的各類功能是由許許多多的不一樣對象協做完成的,面向接口編程是經過各個對象之間的協做關係來實現整個系統。接口的好處就是能夠不用提供實現細節,而只是提供該接口應該具有怎樣的行爲,或者說具備什麼方法,使類之間通訊簡單易懂,擴展性好,提升複用性,擴展性,鬆耦合,題目3用到Comparable和Comparator兩個接口,經過這兩個接口,咱們能夠很方便地對本身定義的類進行比較,從而調用Arrays裏面已經寫好的sort()方法來排序。這個過程至關於面向接口編程。題目4也是如此,在Test類裏面,咱們只要關心數據究竟是以何種數據結構來存放,不須要管具體的底層實現。

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

3.1. 碼雲代碼提交記錄

3.2. PTA實驗

5.1須要瞭解Comparable接口的定義和做用,再運用上類的相關知識,實現Comparable接口,最後使用使用Arrays.sort進行排序。
5.2中須要理解好Comparator。
相關文章
相關標籤/搜索