一、什么是接口
接口就是一個規范,類似於硬件上面的接口,在電腦主板上的PCI插槽的規范就類似於Java接口,只要是遵循PCI接口的卡,不過是什么牌子的都可以插入到PCI插槽中。所以接口就是一個規范。接口就是某個事物對外提供的一些功能的說明。我們還可以利用接口實現多態功能,同時接口也彌補了Java單一繼承的弱點,也就是類可以實現多個接口。
我們使用interface關鍵字定義接口,一般使用接口聲明方法或常量,接口中的方法只能是聲明,不能是具體的實現,這一點和抽象類是不一樣的。接口是更高級別的抽象。接口的定義格式是
public interface 接口名稱{
//可以定義常量
//方法只有方法聲明,而且是公共的。
public void 方法名稱();
...
}
類要實現接口,只需要使用implements關鍵字,實現類必須要實現接口中的所有的方法
public class 實現類名 implements 接口{
//實現接口的方法
}
二、接口的應用
定義一個接口非常簡單,當然其實要設計一個好的接口並不是很簡單,你必須要想好這個接口有什么常量和方法。但是技術卻非常簡單,示例代碼如下:
// 定義方法的接口 public interface Myinterface { // 定義程序使用的常量的接口,接口中只能有常量。 public static final double price = 1450.00; public static final int counter = 5; //接口中所有的方法都沒有方法體。 public void add(int x, int y); public void volume(int x,int y, int z); }
實現接口也沒有什么難度,代碼如下:
//實現 接口 public class MyImple implements Myinterface { @Override public void add(int x, int y) { } @Override public void volume(int x, int y, int z) { } }
一個類是可以實現多個接口,因為java是單繼承的,這點接口可以彌補。我們可以再定義一個接口
public interface MyInterface2 { public void countpp(); }
修改上面的實現類,要實現多個接口,可以使用逗號隔開,當然所有的接口的方法都要實現。
//實現 接口1,接口2 public class MyImple implements Myinterface ,MyInterface2{ @Override public void add(int x, int y) { } @Override public void volume(int x, int y, int z) { } @Override public void countpp() { } }
三、接口和抽象類有什么區別
abstract class和interface是Java語言中對於抽象類定義進行支持的兩種機制,abstract class和interface之間在對於抽象類定義的支持方面具有很大的相似性,甚至可以相互替換,因此很多開發者在進行抽象類定義時對於abstract class和interface的選擇顯得比較隨意。其實,兩者之間還是有很大的區別的
1、抽象類里面可以有非抽象方法。但接口里只能有抽象方法,接口體現的是一種規范,抽象類體現的是模板式設計。
2、接口(interface)是抽像類的變體。在接口中,所有方法都是抽像的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽像的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現了該接口的類的任何對像上調用接口的方法。由於有抽像類,它允許使用接口名作為引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口
3、接口里不可以定義靜態方法,抽象類里可以。接口里的變量全部為靜態常量,抽象類里可以有普通變量。
4.接口里不可以有構造函數和初始化塊,抽象類里可以有。
5.一個類可以實現多個接口,但只能繼承一個抽象類。