介面的定義和實現
1、介面和類很相似,介面中,只包含成員和方法。
(1)介面中的成員全是常量成員 public static final,介面中的方法全是抽象方法。
(2)JDK8之前,介面中的方法不需要有修飾符,因為介面中的方法預設全是public型別的方法,不能有靜態方法,但是在JDK8之後,可以定義靜態方法,同時,方法預設是default型別的,可以定義方法為public型別的,介面中,只允許public,abstract,default,static,public abstract,public static,來作為修飾介面中的方法,其它是不允許的。
public interface InterfaceDemo3 { int a=3; public int b = 3; public static int c = 4; public static final int d =5; }
(3)可以通過extends已有介面定義新介面。
(4)無構造方法(與類不同),不能直接例項化(與抽象類類似)。
2、使用介面
(1)一個類可以使用多個無關介面
(2)一個類如果要實現介面的話,就必須要實現這個介面中所有的方法,因為介面就是一個規範,如果要實現規範的話,就必須要提供規範也就是介面中提供方法的實現。
3、多個無關的類可以實現同一個介面
4、可以直接訪問介面中的靜態成員
上圖中的Eatable.TASTY
可以寫成TASTY
。
5、java中一個類只能繼承於一個父類,或者是說一個類只能有一個直接父類,這裡與c++中不同,c++中一個類可以有多個直接父類。但是,java中,一個類可以實現多個介面。
6、面向介面的程式設計
例項1:
(1)在上圖中,本來是需要一個PCI型別的東西,可是卻傳來了一個GraphicCard(實現了介面PCI,滿足了介面PCI的規範),也就是說,需要一個PCI型別的東西,卻傳過來了一個實現介面PCI的東西,這是可以的,這個類似與前面的通過父類的引用,可以指向一個子類型別的物件。
(2)slot指向了graphicCard,所以,slot中的start也就是相當於實現grapicCard中的start。
上面的例子是面向介面的程式設計,好處是可以面向更多的物件,以下面例子作為對比,下面的例子需要的耦合度太高,在現實生活中很難達到,所以說,還是越抽象越好,耦合度越小越好。
7、多個無關的介面可能有相同的常量成員,這個時候,如果想要訪問這個常量成員的話,只能通過介面.常量成員名稱
的方式來訪問。
8、
(1)介面之間可以實現繼承
(2)抽象類可以有構造方法,但是介面中不能有,抽象類構造方法的提供是為了子類可以呼叫它。
(3)常量成員的屬性是public static final型別的,這個不用加,預設就是這個型別的。