回覆列表
-
1 # 青科
-
2 # 歷歷萬世
沒錯,這就是多型。介面實現的多型,意味著介面UserService負責定義方法的名字,形參列表和返回值,而不考慮其具體實現,呼叫方UserBlh也不必瞭解findUser,saveOrUpdate這兩方法由誰來實現,只需知道這userService指標指向的物件已經實現了這兩個方法,那麼呼叫方UserBlh只管呼叫就好。 “呼叫的是介面UserService中對應的方法,還是呼叫的是介面的實現UserServiceImpl中對應的方法”看來你可能不太清楚在實現層(語言編譯的技術)上如何做的。 具體來說,1.方法實際上就是一段可執行的程式碼。而介面UserService其實就是定義了一個數據結構(其實就是虛擬函式表),而不定義方法本身(就是介面沒有定義可執行的程式碼塊) 2.介面UserService的子類UserServiceImpl在構造函數里要往這個表填一些東西,這個東西就是子類UserServiceImpl所定義的可執行程式碼塊的入口地址。 3.當呼叫方UserBlh呼叫findUser方法,則透過查虛擬函式表的方式找到那個findUser方法的地址,進行呼叫。 給張圖幫助說明從技術的角度如何實現多型。(假設還有一個類B也實現了介面UserService)
多型其實就是使用繼承來實現的一個功能;由於一個類可以被多個子類所繼承,那麼就可以把這個被多個子類繼承的父類看作是擁有多種狀態,
介面的實現
1.介面的組成:public+interface+介面名+{介面體};
2.介面實現以及多重實現的格式:
public+class+類名+implements+介面名+,+介面名+{類體};
3.介面中的變數預設都是public,static,final修飾的,方法則預設是public,abstract修飾的,所以介面中的方法都是抽象方法,在實現了一個介面之後,實現該介面的類必須重寫介面中的抽象方法。
4.因為介面是沒有任何具體實現的,所以是實現多重繼承方法之一(另一個可以實現多重繼承的方法是內部類)。