[public]interface 接口名稱 [extends父接口名列表]java
{工具
//靜態常量設計
[public] [static] [final] 數據類型變量名=常量值;繼承
//抽象方法接口
[public] [abstract] [native] 返回值類型方法名(參數列表);io
}編譯
實現接口格式:table
[修飾符] class 類名[extends 父類名] [implements 接口A,接口B,···]class
{變量
類成員變量和成員方法;
爲接口A中的全部方法編寫方法體,實現接口A;
爲接口B中的全部方法編寫方法體,實現接口B;
}
實例:
本例定義接口AreaInterface,其中有靜態常量pai和求面積的抽象方法area()。類Circle和類Rectangle實現了AreaInterface接口,即爲接口中的抽象方法area()編寫了知足各自要求的方法體,分別求圓形和長方形的面積。
程序:AreaInterface.java
1 2 3 4 5 |
package jiekou; public interface AreaInterface{ double pai=Math.PI; double area(); } |
程序:Circle.java
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package jiekou; public class Circle implements AreaInterface{ double r; public Circle(double x){ r=x; } //實現接口中的抽象方法,求圓面積 public double area(){ return pai * r * r; } public String toString(){ return "圓:r="+r+"\tarea="+area(); } } |
程序:Rectangle.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package iekou; public class Rectangle implements AreaInterface{ double x,y; public Rectangle(double a,double b){ x=a; y=b; } public double area()//實現接口中的抽象方法,求長方形面積 { return x * y; } public String toString() { return "長方形:x="+x+";y="+y+"\t" area=+area(); } } |
Java接口和Java抽象類最大的一個區別,就在於Java抽象類能夠提供某些方法的部分實現,而Java接口不能夠,這大概就是Java抽象類惟一的優勢吧,但這個優勢很是有用。若是向一個抽象類里加入一個新的具體方法時,那麼它全部的子類都一會兒都獲得了這個新方法,而Java接口作不到這一點,若是向一個Java接口裏加入一個新方法,全部實現這個接口的類就沒法成功經過編譯了,由於你必須讓每個類都再實現這個方法才行,這顯然是Java接口的缺點。
一個抽象類的實現只能由這個抽象類的子類給出,也就是說,這個實現處在抽象類所定義出的繼承的等級結構中,而因爲Java語言的單繼承性,因此抽象類做爲類型定義工具的效能大打折扣。在這一點上,Java接口的優點就出來了,任何一個實現了一個Java接口所規定的方法的類均可以具備這個接口的類型,而一個類能夠實現任意多個Java接口,從而這個類就有了多種類型。
不難看出,Java接口是定義混合類型的理想工具,混合類代表一個類不單單具備某個主類型的行爲,並且具備其餘的次要行爲。
在語法上,抽象類和接口有着如下不一樣:
1.abstract class在Java語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。可是,一個類卻能夠實現多個interface。 繼承抽象類使用的是extends關鍵字,實現接口使用的是implements關鍵字,繼承寫在前面,實現接口寫在後面。若是實現多個接口,中間用逗號分隔。例:
public class Main extends JApplet
public class Main implements Runnable
public class Main extends JApplet implements ActionListener
public class Main extends JApplet implements ActionListener, Runnable
2.在abstract class中能夠有本身的數據成員,也能夠有非abstract的成員方法,而在interface中,只可以有靜態的不能被修改的數據成員(也就是必須是static final的,不過在 interface中通常不定義數據成員),全部的成員方法都是abstract的。
3.abstract class和interface所反映出的設計理念不一樣。其實abstract class表示的是"is-a"關係,interface表示的是"like-a"關係。
4.實現接口的類必須實現其中的全部方法,繼承自抽象類的子類實現全部的抽象方法。抽象類中能夠有非抽象方法。接口中則不能有實現方法。
5.接口中定義的變量默認是public static final 型,且必須給其初值,因此實現類中不能從新定義,也不能改變其值。
6.抽象類中的變量默認具備 friendly權限,其值能夠在子類中從新定義,也能夠從新賦值。
7.接口中的方法默認都是 public abstract 類型的。