更新時(shí)間:2020-10-15 17:26:10 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1410次
Java接口是整個(gè)Java語言中重要的組成部分,Java接口實(shí)際上是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類實(shí)現(xiàn),而這些實(shí)現(xiàn)可以具有不同的行為(功能)。由此看來,Java接口的存在是意義非凡的,本文我們就一起來討論Java接口作用及意義。
從某種程度上來說,Java接口作用及意義可以分為以下幾點(diǎn):
1、重要性:在Java語言中, abstract class 和interface 是支持抽象類定義的兩種機(jī)制。正是由于這兩種機(jī)制的存在,才賦予了Java強(qiáng)大的面向?qū)ο竽芰Α?/p>
2、簡單、規(guī)范性:如果一個(gè)項(xiàng)目比較龐大,那么就需要一個(gè)能理清所有業(yè)務(wù)的架構(gòu)師來定義一些主要的接口,這些接口不僅告訴開發(fā)人員你需要實(shí)現(xiàn)那些業(yè)務(wù),而且也將命名規(guī)范限制住了(防止一些開發(fā)人員隨便命名導(dǎo)致別的程序員無法看明白)。
3、維護(hù)、拓展性:比如你要做一個(gè)畫板程序,其中里面有一個(gè)面板類,主要負(fù)責(zé)繪畫功能,然后你就這樣定義了這個(gè)類,可是在不久將來,你突然發(fā)現(xiàn)這個(gè)類滿足不了你了,然后你又要重新設(shè)計(jì)這個(gè)類,更糟糕是你可能要放棄這個(gè)類,那么其他地方可能有引用他,這樣修改起來很麻煩,如果你一開始定義一個(gè)接口,把繪制功能放在接口里,然后定義類時(shí)實(shí)現(xiàn)這個(gè)接口,然后你只要用這個(gè)接口去引用實(shí)現(xiàn)它的類就行了,以后要換的話只不過是引用另一個(gè)類而已,這樣就達(dá)到維護(hù)、拓展的方便性。
4、安全、嚴(yán)密性:接口是實(shí)現(xiàn)軟件松耦合的重要手段,它描敘了系統(tǒng)對外的所有服務(wù),而不涉及任何具體的實(shí)現(xiàn)細(xì)節(jié)。這樣就比較安全、嚴(yán)密一些(一般軟件服務(wù)商考慮的比較多)。
但我們?nèi)绻钊氲奶接慗ava接口存在的意義,我們就會(huì)發(fā)現(xiàn),Java接口的存在實(shí)際上是為了禁止直接為其實(shí)例化對象和打破單繼承局限即實(shí)現(xiàn)偽多重繼承。這對整個(gè)Java語言來說都是有著重大意義的。
1.禁止直接為其實(shí)例化對象
在這個(gè)點(diǎn)上,相比于抽象類,Java 對接口的限制更加嚴(yán)格了,因?yàn)榻涌谶B構(gòu)造方法都沒有,所以,根本不可能為其實(shí)例化對象。
//源碼
public interface Move {
//此時(shí)編譯器會(huì)提示 Interfaces cannot have constructors 錯(cuò)誤信息
public Move(){}
void move();
}
2.打破單繼承局限(實(shí)現(xiàn)偽多重繼承)
不支持多重繼承是Java的特性,但是Java可以實(shí)現(xiàn)多個(gè)接口,這個(gè)在某種程度上可以看做進(jìn)行多重繼承的一種辦法。所以,一個(gè)類在實(shí)現(xiàn)了多個(gè)接口之后,就可以上轉(zhuǎn)型為多個(gè)接口,即打破單繼承局限。
//源碼
public interface Fly {
void fly();
}
public interface Fight {
void fight();
}
public class SuperMan implements Fly,Fight{
@Override
public void fight() {
System.out.println("SuperMan fight");
}
@Override
public void fly() {
System.out.println("SuperMan fly");
}
}
public class MultiImplementsTest {
public static void main(String[] args) {
SuperMan sm = new SuperMan();
fly(sm);
fight(sm);
}
private static void fly(Fly f){
f.fly();
}
private static void fight(Fight f){
f.fight();
}
}
//執(zhí)行結(jié)果
SuperMan fly
SuperMan fight
由于 SuperMan 實(shí)現(xiàn)了 Fly 和 Fight 接口,所以 SuperMan 可以上轉(zhuǎn)型為 Fly 接口,也可以上轉(zhuǎn)型為 Fight 接口,即另類的“多重繼承”。
綜上所述,Java接口作用及意義主要還是在于打破Java自身單繼承的枷鎖,同時(shí)也能防止接口自身實(shí)例化對象,正如本文中的第一點(diǎn)所講的那樣,正是Java接口這一機(jī)制的存在,才賦予了Java強(qiáng)大的面向?qū)ο竽芰ΑN覀冎v了這么多,實(shí)際上對于Java接口作用及意義應(yīng)該有所了解和掌握吧,但java接口的相關(guān)知識(shí)點(diǎn)我們才剛剛起步,學(xué)習(xí)Java接口,任重而道遠(yuǎn),怎可沒有動(dòng)力節(jié)點(diǎn)的陪伴?觀看本站的Java基礎(chǔ)教程,動(dòng)力節(jié)點(diǎn)陪你一起學(xué)Java!