例如,定義一個用于計算的接口,在該接口中定義了一個常量PI和兩個方法,具體代碼如下:
創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計、做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)鳳慶,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
[java] view plaincopy
public interface CalInterface
{
final float PI=3.14159f;//定義用于表示圓周率的常量PI
float getArea(float r);//定義一個用于計算面積的方法getArea()
float getCircumference(float r);//定義一個用于計算周長的方法getCircumference()
}
注意:
與Java的類文件一樣,接口文件的文件名必須與接口名相同。
實現(xiàn)接口
接口在定義后,就可以在類中實現(xiàn)該接口。在類中實現(xiàn)接口可以使用關(guān)鍵字implements,其基
extends 父類名:可選參數(shù),用于指定要定義的類繼承于哪個父類。當使用extends關(guān)鍵字時,父類名為必選參數(shù)。
implements 接口列表:可選參數(shù),用于指定該類實現(xiàn)的是哪些接口。當使用implements關(guān)鍵字時,接口列表為必選參數(shù)。當接口列表中存在多個接口名時,各個接口名之間使用逗號分隔。
在類中實現(xiàn)接口時,方法的名字、返回值類型、參數(shù)的個數(shù)及類型必須與接口中的完全一致,并且必須實現(xiàn)接口中的所有方法。例如,編寫一個名稱為Cire的類,該類實現(xiàn)5.7.1節(jié)中定義的接口Calculate,具體代碼如下:
[java] view plaincopy
public class Cire implements CalInterface
{
public float getArea(float r)
{
float area=PI*r*r;//計算圓面積并賦值給變量area
return area;//返回計算后的圓面積
}
public float getCircumference(float r)
{
float circumference=2*PI*r; //計算圓周長并賦值給變量circumference
return circumference; //返回計算后的圓周長
}
public static void main(String[] args)
{
Cire c = new Cire();
float f = c.getArea(2.0f);
System.out.println(Float.toString(f));
}
}
在類的繼承中,只能做單重繼承,而實現(xiàn)接口時,一次則可以實現(xiàn)多個接口,每個接口間使用逗號“,”分隔。這時就可能出現(xiàn)常量或方法名沖突的情況,解決該問題時,如果常量沖突,則需要明確指定常量的接口,這可以通過“接口名.常量”實現(xiàn)。如果出現(xiàn)方法沖突時,則只要實現(xiàn)一個方法就可以了。下面通過一個具體的實例詳細介紹以上問題的解決方法。
java中接口的定義和接口的實現(xiàn)
1.接口的定義
使用interface來定義一個接口。接口定義同類的定義類似,也是分為接口的聲明和接口體,其中接口體由常量定義和方法定義兩部分組成。定義接口的基本格式如下:
[修飾符] interface 接口名 [extends 父接口名列表]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
}
修飾符:可選,用于指定接口的訪問權(quán)限,可選值為public。如果省略則使用默認的訪問權(quán)限。
接口名:必選參數(shù),用于指定接口的名稱,接口名必須是合法的Java標識符。一般情況下,要求首字母大寫。
extends 父接口名列表:可選參數(shù),用于指定要定義的接口繼承于哪個父接口。當使用extends關(guān)鍵字時,父接口名為必選參數(shù)。
方法:接口中的方法只有定義而沒有被實現(xiàn)。
例如,定義一個用于計算的接口,在該接口中定義了一個常量PI和兩個方法,具體代碼如下:
1 public interface CalInterface
2 {
3 ? ? final float PI=3.14159f;//定義用于表示圓周率的常量PI
4 ? ? float getArea(float r);//定義一個用于計算面積的方法getArea()
5 ? ? float getCircumference(float r);//定義一個用于計算周長的方法getCircumference()
6 }
注意:
與Java的類文件一樣,接口文件的文件名必須與接口名相同。
2.接口的實現(xiàn)
接口在定義后,就可以在類中實現(xiàn)該接口。在類中實現(xiàn)接口可以使用關(guān)鍵字implements,其基本格式如下:
[修飾符] class 類名 [extends 父類名] [implements 接口列表]{
}
修飾符:可選參數(shù),用于指定類的訪問權(quán)限,可選值為public、abstract和final。
類名:必選參數(shù),用于指定類的名稱,類名必須是合法的Java標識符。一般情況下,要求首字母大寫。
extends 父類名:可選參數(shù),用于指定要定義的類繼承于哪個父類。當使用extends關(guān)鍵字時,父類名為必選參數(shù)。
implements 接口列表:可選參數(shù),用于指定該類實現(xiàn)的是哪些接口。當使用implements關(guān)鍵字時,接口列表為必選參數(shù)。當接口列表中存在多個接口名時,各個接口名之間使用逗號分隔。
在類中實現(xiàn)接口時,方法的名字、返回值類型、參數(shù)的個數(shù)及類型必須與接口中的完全一致,并且必須實現(xiàn)接口中的所有方法。例如,編寫一個名稱為Cire的類,該類實現(xiàn)5.7.1節(jié)中定義的接口Calculate,具體代碼如下:
1 public class Cire implements CalInterface
2 {
3 ? ? public float getArea(float r)
4 ? ? {
5 ? ? ? ? float area=PI*r*r;//計算圓面積并賦值給變量area
6 ? ? ? ? return area;//返回計算后的圓面積
7 ? ? }
8 ? ? public float getCircumference(float r)
9 ? ? {
10 ? ? ? ? float circumference=2*PI*r; ? ? ?//計算圓周長并賦值給變量circumference
11 ? ? ? ? return circumference; ? ? ? ? ? //返回計算后的圓周長
12 ? ? }
13 ? ? public static void main(String[] args)
14 ? ? {
15 ? ? ? ? Cire c = new Cire();
16 ? ? ? ? float f = c.getArea(2.0f);
17 ? ? ? ? System.out.println(Float.toString(f));
18 ? ? }
19 }
在類的繼承中,只能做單重繼承,而實現(xiàn)接口時,一次則可以實現(xiàn)多個接口,每個接口間使用逗號“,”分隔。這時就可能出現(xiàn)常量或方法名沖突的情況,解決該問題時,如果常量沖突,則需要明確指定常量的接口,這可以通過“接口名.常量”實現(xiàn)。如果出現(xiàn)方法沖突時,則只要實現(xiàn)一個方法就可以了。下面通過一個具體的實例詳細介紹以上問題的解決方法。
舉個面積的例子:在java中,定義一個接口,聲明計算長方形面積和周長的抽象方法,再用一個類去實現(xiàn)這個接口,再編寫一個測試類去使用這個接口。首先,接口必須單獨存放,如果我們用eclipse編程的話,它們提示:The public type **** must be defined in its own file,意思是必須要定義在其自己的文件中,所以要為接口文件單獨存放起來,舉例,我們的接口要實現(xiàn)獲到矩形的長,寬,面積,周長,所以定義以下的接口。public interface calrect {\x0d\x0apublic abstract int calarea();\x0d\x0apublic abstract int calgirth();\x0d\x0apublic abstract int getx();\x0d\x0apublic abstract int gety();\x0d\x0a}注意,定義接口就像定義類一樣,接口的訪問控制符只能用public,用public定義的接口可以被所有的類和包引用,而缺省的則只能被同一個包中的其他類和接口引用,這符合JAVA中訪問控制符的一般要求,關(guān)于接口再引用其他接口則是后話。以上接口文件名為calrect.java.另外需要指出的是接口中不能給方法給出方法體。接下來,需要定義一個類來實現(xiàn)接口,因為不知道JAVA的內(nèi)置矩形類是什么名,所以為了安全,將該類定義為RRect,這可以認為是一種安全策略。關(guān)于implements,可以參考其他資料。該類引用了接口calrect,所以必須對calrect中的方法一一實現(xiàn)。//定義矩形類 應(yīng)用接口class RRect implements calrect{private int x;\x0d\x0aprivate int y;public RRect (){\x0d\x0a x=3;y=4;\x0d\x0a}\x0d\x0apublic int calarea(){\x0d\x0a return x*y;\x0d\x0a}\x0d\x0apublic int calgirth(){\x0d\x0a return x*2+y*2;\x0d\x0a}\x0d\x0apublic int getx(){\x0d\x0a return x;\x0d\x0a}\x0d\x0apublic int gety(){\x0d\x0a return y;\x0d\x0a}\x0d\x0a}//接下來,定義一個測試類,所謂測試類,我理解為定義一個類,在其定義類RRect的對象,并驗證其中的方法,看看是不是可以正常使用//定義Class1類\x0d\x0apublic class Class1{\x0d\x0aRRect rect;\x0d\x0apublic static void main(String []args){\x0d\x0a RRect rect=new RRect();\x0d\x0a System.out.println("矩陣的長"+ rect.getx());\x0d\x0a System.out.println("矩陣的寬"+ rect.calarea());\x0d\x0a System.out.println("矩陣的面積"+ rect.calarea());\x0d\x0a System.out.println("矩形的周長 "+rect.calgirth());\x0d\x0a}\x0d\x0a\x0d\x0a}運行結(jié)果:矩陣的長3\x0d\x0a矩陣的寬12\x0d\x0a矩陣的面積12\x0d\x0a矩形的周長 14注:接口單存放,接口實現(xiàn)類和測試類可以存放在一個文件中