JAVA定義接口格式:


[public]interface 接口名稱 [extends父接口名列表]

{

//靜態常量

[public] [static] [final] 數據類型變量名=常量值;

//抽象方法

[public] [abstract] [native] 返回值類型方法名(參數列表);

}

實現接口格式:

[修飾符] class 類名[extends 父類名] [implements 接口A,接口B,···]

{

類成員變量和成員方法;

為接口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 類型的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM