Java基礎——面向物件(四)介面
阿新 • • 發佈:2019-01-10
一、定義
為了引入介面概念,可以這麼理解:當為個抽象類中的方法都是抽象的時候,這時可將該抽象類用另一種形式定義和表示,就是 介面 interface。
定義介面使用的關鍵字不是class,而是interface————類似於class這麼一種關鍵字,尤其編譯完還是class字尾。
對於介面當中常見的成員:而且這些成員都有固定的修飾符
1.全域性常量:public static final
2.抽象方法。public abstract
interface IDemo { public static final int NUM = 4; public abstract void show1(); public abstract void show2(); } //可以簡寫做:但一般不這麼做 interface IDemo { int NUM = 4; void show1(); void show2(); }
二、實現
類與類之間是繼承關係,類與介面之間是是實現關係。
class DemoImpl implements IDemo
{
}
介面不能被例項化。只能由實現了介面的子類並覆蓋了介面中所有的抽象方法後,該子類才可以例項化。否則,這個子類就是一個抽象類。
三、多實現
1.Java中不直接支援多繼承,因為會出現呼叫的不確定性。所以Java中將多繼承機制進行了改良,在Java中變成了多實現。
即一個類可以實現多個介面。
interface IA { public abstract void show(); } interface IZ { public abstract void show(); } //多實現 class Demo implements IA, IZ { public void show(){ } }
除此之外,一個類在繼承另一個類的同時,還可以實現多個介面。因此,介面的出現避免了單繼承的侷限性。
2.細節
介面與介面之間是繼承關係,而且介面可以多繼承。
四、介面的特點
- 介面是對外暴露的規則。
- 藉口是程式的功能拓展。
- 介面的出現降低耦合性。
- 介面可以用來多實現。
- 類和介面之間是是相關係,而且類可以繼承一個類的同時實現多個介面。
- 介面與介面之間可以有繼承關係。
五、介面與抽象類異同點
1.相同點:都是不斷向上抽取而來的
2.不同點:
- 抽象類需要被繼承,而且只能單繼承;介面需要被實現,而且可以多實現。
- 抽象類中可以定義抽象方法和非抽象方法,子類繼承後可以直接使用非抽象方法;介面中只能定義抽象方法,必須有子類去實現。
- 抽象類的繼承,是is a關係,在定義該體系的基本共性內容;介面的實現是like a關係,在定義體系額外功能。
六、介面的應用
用自己的理解描述一下筆記本和其相關介面的例子。
/*
膝上型電腦使用。
為了擴充套件筆記本的功能,但日後出現什麼功能裝置不知道。
定義一個規則,只要日後出現的裝置都符合這個規則就可以了。
規則在java中就是介面。
*/
interface USB// 暴露的規則。
{
public void open();
public void close();
}
class BookPC
{
public static void main(String[] args)
{
useUSB(new UPan());//功能擴充套件了。
useUSB(new UsbMouse());
}
//使用規則。
public static void useUSB(USB u)//介面型別的引用,用於接收(指向)介面的子類物件。//USB u= new UPan();
{
if(u!=null)
{
u.open();
u.close();
}
}
}
//一年後。有錢了,買了一個U盤------------------------------
//實現規則。
//這些裝置和電腦的耦合性降低了。
class UPan implements USB
{
public void open()
{
System.out.println("upan open");
}
public void close()
{
System.out.println("upan close");
}
}
//又一年後,又有錢了,買了一個滑鼠
class UsbMouse implements USB
{
public void open()
{
System.out.println("UsbMouse open");
}
public void close()
{
System.out.println("UsbMouse close");
}
}