一、接口及作用
接口是一個非常重要的概念,理解這個,先舉一個實現生活中的實例。
現在,電腦主板,有很多插槽,可用來插CPU、內存等。當CPU等元件需要更新換代升級時,只要將CPU單獨更換就可以了,而不需要更換主板。其實,主板上的這些暴露在外的插槽,就可以理解為接口。
接口就是對外暴露的規則,只要符合規則的CPU、內存,不論品牌、型號、規格,都可以安插使用。
接口是程序的功能擴展。有了插槽,也就提高了主板的功能擴展性,比如內存不夠用了,我們就可以換成內容最大的內存條,或再加新的內存條。
接口降低了耦合性。有了規則,主板和CPU等元件的就分開了,可以分開生了。只要符合規則,元件就可以插入插槽進行使用。這樣,主板廠商和CUP廠商之間的聯系就少了。
二、接口的定義格式
class 用於定義類。
interface用於定義接口。
接口中常見的定義:常量、抽象方法
常量:public static final
方法:public abstract
接口中的成員都是public,而且這些修飾都是可以省略的,只要是interface,系統就會自動補足。
三、接口的特點
接口不能直接創建對象
類與類之間是“繼承extends”。(因為父類中有非抽象內容,可以直接拿過來用)
類與接口之間是“實現implements”。(因為接口內的成員都是抽象的,子類要將父類中的成員全都實現后,才可使用)
接口與接口之間是“繼承extends”。
接口可以被類多實現,即一個類可以實現多個類。這是對JAVA不支持多繼承的一種轉換形式。
interface Inter { public static final int NUM = 3; public abstract void show(); } class Test implements Inter // class是繼承(因為父類中有非抽象內容,可以被子類調用) // interface是實現(因為子類要全都將接口中的內容實例化后才能使用) { public void show() { } } public class InterfaceDemo { public static void main(String[] args) { Test t = new Test(); System.out.println(t.NUM); // 對象可以調用成員 System.out.println(Test.NUM); // 類可以調用成員。因為Test實現了Inter,相當於其中也有NUM System.out.println(Inter.NUM); // 接口可以調用成員 } }
多現實
interface Inter { //第一個接口 public static final int NUM = 3; public abstract void show(); } interface InterA { //第二個接口 public abstract void method(); } class Demo { public void myFunction() { } } // 類可以繼承類同時實現多個接口,同時繼承類。 //因為接口中的方法沒有方法主休,所以可以多實現,由子類任意定義。 class Test extends Demo implements Inter, InterA { public void show(){} //復寫接口內的所有方法 public void method(){} //復寫接口內的所有方法 }
interface Inter { //第一個接口 public static final int NUM = 3; public abstract void show(); } interface InterA { //第二個接口 public abstract void show(); } class Test extends Demo implements Inter, InterA { public void show(){} //兩個接口內的方法同名時,實現多接口時只要復寫一次即可 }
接口之間是繼承
interface A { //A有一個方法 void methodA(); } interface B extends A { //B有兩個方法 void methodB(); } interface C extends B { //C有三個方法 void methodC(); } class D implements C{ //接口A繼承B,B函數C,類D實現接口C,D中要復寫3個方法 public void methodA(){} public void methodB(){} public void methodC(){} }
interface A { //A有一個方法 void methodA(); } interface B { //B有一個方法 void methodB(); } interface C extends A、B { //C有繼承A、B void methodC(); }
