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。