更新時(shí)間:2020-10-16 17:35:20 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1325次
說(shuō)到Java接口實(shí)現(xiàn),我們先來(lái)通過(guò)一個(gè)例子來(lái)明確Java中接口的概念,這個(gè)例子是"比較",很多對(duì)象都可以比較,對(duì)于求最大值、求最小值、排序的程序而言,它們其實(shí)并不關(guān)心對(duì)象的類(lèi)型是什么,只要對(duì)象可以比較就可以了,或者說(shuō),它們關(guān)心的是對(duì)象有沒(méi)有可比較的能力。
Java API中提供了Comparable接口,以表示可比較的能力,但它使用了泛型,而我們還沒(méi)有介紹泛型,所以本節(jié),我們自己定義一個(gè)Comparable接口,叫MyComparable。
現(xiàn)在,首先,我們來(lái)定義這個(gè)java接口,代碼如下:
public interface MyComparable {
int compareTo(Object other);
}
解釋一下:
Java使用interface這個(gè)關(guān)鍵字來(lái)聲明接口,修飾符一般都是public。
interface后面就是接口的名字MyComparable。
接口定義里面,聲明了一個(gè)方法compareTo,但沒(méi)有定義方法體,接口都不實(shí)現(xiàn)方法。接口方法不需要加修飾符,加與不加都是public的,不能是別的修飾符。
再來(lái)解釋一下compareTo方法:
方法的參數(shù)是一個(gè)Object類(lèi)型的變量other,表示另一個(gè)參與比較的對(duì)象。
第一個(gè)參與比較的對(duì)象是自己
返回結(jié)果是int類(lèi)型,-1表示自己小于參數(shù)對(duì)象,0表示相同,1表示大于參數(shù)對(duì)象
接口與類(lèi)不同,它的方法沒(méi)有實(shí)現(xiàn)代碼。定義一個(gè)接口本身并沒(méi)有做什么,也沒(méi)有太大的用處,它還需要至少兩個(gè)參與者,一個(gè)需要實(shí)現(xiàn)接口,另一個(gè)使用接口,我們先來(lái)說(shuō)說(shuō)如何實(shí)現(xiàn)接口:
類(lèi)可以實(shí)現(xiàn)接口,表示類(lèi)的對(duì)象具有接口所表示的能力。我們來(lái)看一個(gè)例子,以前面介紹過(guò)的Point類(lèi)來(lái)說(shuō)明,我們讓Point具備可以比較的能力,Point之間怎么比較呢?我們假設(shè)按照與原點(diǎn)的距離進(jìn)行比較,下面是Point類(lèi)的代碼:
public class Point implements MyComparable {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public double distance(){
return Math.sqrt(x*x+y*y);
}
@Override
public int compareTo(Object other) {
if(!(other instanceof Point)){
throw new IllegalArgumentException();
}
Point otherPoint = (Point)other;
double delta = distance() - otherPoint.distance();
if(delta<0){
return -1;
}else if(delta>0){
return 1;
}else{
return 0;
}
}
@Override
public String toString() {
return "("+x+","+y+")";
}
}
我們解釋一下:
Java使用implements這個(gè)關(guān)鍵字表示實(shí)現(xiàn)接口,前面是類(lèi)名,后面是接口名。
實(shí)現(xiàn)接口必須要實(shí)現(xiàn)接口中聲明的方法,Point實(shí)現(xiàn)了compareTo方法。
我們?cè)賮?lái)解釋一下Point的compareTo實(shí)現(xiàn):
Point不能與其他類(lèi)型的對(duì)象進(jìn)行比較,它首先檢查要比較的對(duì)象是否是Point類(lèi)型,如果不是,使用throw拋出一個(gè)異常,異常我們還沒(méi)提到,后續(xù)文章講解,此處可以忽略。
如果是Point類(lèi)型,使用強(qiáng)制類(lèi)型轉(zhuǎn)換將Object類(lèi)型的參數(shù)other轉(zhuǎn)換為Point類(lèi)型的參數(shù)otherPoint。
這種顯式的類(lèi)型檢查和強(qiáng)制轉(zhuǎn)換是可以使用泛型機(jī)制避免的,后續(xù)文章我們?cè)俳榻B泛型。
一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,表明類(lèi)的對(duì)象具備多種能力,各個(gè)接口之間以逗號(hào)分隔,語(yǔ)法如下所示:
public class Test implements Interface1, Interface2 {
....
}
本文我們通過(guò)實(shí)例粗淺的了解了Java接口實(shí)現(xiàn)的相關(guān)知識(shí),實(shí)際上Java接口實(shí)現(xiàn)是一節(jié)需要耗時(shí)很長(zhǎng)的課程,我們只是剛剛開(kāi)始,接下來(lái)的課程可以到本站的Java零基礎(chǔ)入門(mén)教程中自主學(xué)習(xí),好風(fēng)憑借力,揚(yáng)帆正當(dāng)時(shí),相信你一定能攻克難關(guān),學(xué)有所成!
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743