1. 程式人生 > >類與介面之間關係、介面與介面之間關係、面向物件三大特徵之多型

類與介面之間關係、介面與介面之間關係、面向物件三大特徵之多型

一、類與介面之間關係: 實現關係。
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、多型的好處: 提高了程式碼的拓展性。