1.接口不是類,不能使用new進行實例化
2.使用instanceof運算符,能夠查看該對象是否實現了Comparable接口
3.接口能夠擴展extends
4.接口中能夠包含常
5.一個類能夠實現多個接口
參考資料:java
百度腦圖
XMind編程
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
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
題目集:jmu-Java-04-面向對象2-進階-多態接口內部類code
在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖
對象
經過實驗熟練的掌握了Comparable接口和編寫comparaTo方法。blog