類與介面之間關係、介面與介面之間關係、面向物件三大特徵之多型
一、類與介面之間關係: 實現關係。
1、類與介面要注意的事項:
1)重點內容非抽象類實現一個介面時,必須要把介面中所有方法全部實現。
2)抽象類實現一個介面時,可以實現也可以不實現介面中的 方法。
3)一個類可以實現多個介面 。
2、疑問: java為什麼不支援多繼承,而支援了多實現呢?
答:程式碼所示,假設可以多繼承,那麼當兩個父類有同名的方法,子類使用該方法時,會呼叫哪一個呢?所以java中不可能存在多繼承。
class A{
public void print(){
System.out.println("AAAAAA");
}
}
class B{
public void print(){
System.out.println("BBBBBB");
}
}
class C extends A ,B{
}
class Demo{
public static void main(String[] args){
new C().print();
}
}
二、介面與介面之間關係: 繼承關係。
1、介面與介面之間要注意事項:一個介面是可以繼承多個介面的。
三、總結:類與介面是可以多實現的,介面與介面是可以多繼承的。
四、多型:
1、面向物件的三大特徵:封裝、繼承、多型
2、多型含義:一個物件具備多種形態。(父類的引用型別變數指向了子類的物件)(或者是介面的引用型別變數指向了介面實現類的物件)
3、多型的前提:必須存在繼承或者實現關係。
4、多型要注意的細節:
1)多型情況下,子父類存在同名的成員變數(無論靜態還是非靜態)時,訪問的是父類的成員變數。
2)多型情況下,子父類存在同名的非靜態的成員函式時,訪問的是子類的成員函式。
3)多型情況下,子父類存在同名的靜態的成員函式時,訪問的是父類的成員函式。
4)多型情況下,不能訪問子類特有的成員。
總結:多型情況下,子父類存在同名的成員時,訪問的都是父類的成員,除了在同名非靜態函式時才是訪問子類的。
5、編譯看左邊,執行不一定看右邊。
解釋:編譯看左邊:java編譯器在編譯的時候,會檢查引用型別變數所屬的類是否具備指定的成員,如果不具備馬上編譯報錯。
6、多型的應用:
1)多型用於形參型別的時候,可以接收更多型別的資料 。
需求1: 定義一個函式可以接收任意型別的圖形物件,並且列印圖形面積。
解決方法1:使用函式過載,不好,每多一個型別,就要增加一個對應的重寫方法,程式的拓展性差。並且程式碼重複冗餘。
解決方法2:
2)多型用於返回值型別的時候,可以返回更多型別的資料。
需求2: 定義一個函式可以返回任意型別的圖形物件。
解決方法:
7、多型的好處: 提高了程式碼的拓展性。