多個無關的類能夠實現同一個接口.函數
一個類能夠實現多個無關的接口.ui
與繼承關係相似,接口與實現類之間存在多態性.3d
定義JAVA類的語法格式:對象
< modifier> class < name > [extends < superclass >]blog
[implements <interface>] [,<interface>* ]{繼承
< declarations>*接口
}io
接口是抽象方法和常量值定義的集合.class
從本質上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現.變量
接口舉例:
public interface Runner{
public static final int id = 1; //用static靜態變量.
public void start();
public void run();
public void stop();
}
在接口中全部的方法都是abstract.
接口的特性:
接口能夠多重實現. 多重接口.一個類能夠實現多個接口.
接口中默認的屬性是public static final的.也只能是public static final的.在定義中能夠不寫puiblic static final.寫不寫都同樣.
接口中只能定義抽象方法,並且 這些方法默認是public的.也只能是public的.
接口能夠繼承其餘的接口,並添加新的屬性和抽象方法.
接口舉例:
接口的繼承關係用implements(實現接口,等於實現接口中的抽象方法)
不要忘記接口中的方法都是抽象方法必需要進行重寫.
接上圖
一個類能夠實現多個接口.Teacher實現了painter和singer兩個接口,重寫兩個接口的全部方法.
多個無關的類能夠實現同一個接口. Teacher實現了singer接口,Student也實現了singer接口.
s2指向teacher p1等價於s2也指向teacher.
可是根據多態/動態綁定. p1把teacher當作painter來看.可以訪問teacher中的eat和paint.
f(singer s){
s.sing();
}
singer s是一個接口變量.只要實現了接口的任何對象均可以往裏面傳,例如上面S1 S2 均可以往裏面傳.
既然實現了接口,那麼必定對接口進行了重寫. 也就能夠用sing這個重寫過的方法.例如Student對sing進行了重寫
f(Singer s){s.sing}是實現多態/動態綁定的語句.根據傳入的接口變量動態綁定須要輸出的sing.
輸入s1會輸出 Student is sing. 輸入 s2 會輸出teacher is sing.
接口和接口之間能夠繼承. 要注意須要重寫的函數個數. 被繼承的接口的函數也須要重寫.