Java——介面的定義與使用
介面
我們生活中經常聽到usb介面,也知道電腦上有usb介面,那麼介面是什麼?
在我理解就是usb介面定義了一種標準或者說是規範,只有符合此標準的裝置都可以使用usb介面。比如滑鼠、鍵盤、印表機,我們不需要在電腦上開3個插槽來接這3個裝置,只需要一個usb介面就能搞定。
在Java中,介面有點像抽象類,但是也有不同。抽象類強調的是一種 is a 的關係,比如學生是人類、工人是人類等等。而介面又有不同,介面更像是一種like a的關係,滑鼠、鍵盤、印表機可以通過usb介面聯絡到一起。
介面的定義(jdk8以前):抽象方法與全域性常量的集合(純粹版的抽象類),Java中使用interface關鍵字來定義介面
//一個簡單的介面
interface IMyInterface{
public static final String msg = "test";
public abstract void print();
}
介面的作用
1.定義操作標準
2.表示能力
3.分散式開發之中,暴露遠端服務方法
介面優先原則:在一個操作既可以使用抽象類又可以使用介面的時候,優先使用介面。
介面命名:介面使用I開頭
注意:
- 子類要想使用介面,使用implements實現介面,一個子類可以同時實現多個父介面(避免了Java中單繼承侷限)
-
interface IMyInterface{ String msg = "test"; void print(); } interface IMyInterface_Second{ String msg2 = "test2"; void print2(); } //一個子類可以實現多個介面,也要重寫多個介面的所有抽象方法 class MyInterfaceImpl implements IMyInterface,IMyInterface_Second{ public void print(){ System.out.println(msg); } public void print2(){ System.out.println(msg2); } }
- 父介面可以相互轉換(前提是兩個父介面有一個共同的實現子類)
-
interface IMyInterface{ String msg = "test"; void print(); } interface IMyInterface_Second{ String msg2 = "test2"; void print2(); } class MyInterfaceImpl implements IMyInterface,IMyInterface_Second{ public void print(){ System.out.println(msg); } public void print2(){ System.out.println(msg2); } } class Test{ public static void main(String[] args) { IMyInterface my = new MyInterfaceImpl(); IMyInterface_Second my2 = (IMyInterface_Second)my;//父介面的相互轉換 my2.print2(); } }
- 子類的命名規範:介面名為IMyInterface,子類實現此介面,命名為MyInterfaceImpl
介面的應用
/**
* 定義一個USB介面
*/
interface USB{
void insert();//usb裝置插入
void setup();//usb裝置安裝驅動
void work();//usb裝置正常執行
}
/**
* 定義一個電腦類
*/
class Computer{
public void plugIn(USB usb){
usb.insert();
usb.setup();
usb.work();
}
}
/**
* 定義一個USB裝置實現介面
*/
class Mouse implements USB{
public void insert(){
System.out.println("滑鼠插入");
}
public void setup(){
System.out.println("滑鼠安裝驅動");
}
public void work(){
System.out.println("滑鼠正常工作");
}
}
class UDisk implements USB{
public void insert(){
System.out.println("U盤插入");
}
public void setup(){
System.out.println("U盤安裝驅動");
}
public void work(){
System.out.println("U盤正常工作");
}
}
class Test{
public static void main(String[] args) {
Computer computer = new Computer();
computer.plugIn(new Mouse());
computer.plugIn(new UDisk());
}
}
通過以上程式碼我們發現:介面和物件多型性的概念結合之後,對於引數的統一更加明確了。而且可以發現介面是在
類之上的設計抽象。
介面的使用限制
1.介面中只允許public許可權(無論是常量還是方法,都是public許可權,即便不寫許可權修飾符也是public)
99%的介面只提供抽象方法。很少在接口裡提供全域性常量
阿里編碼規約:介面中不用出現任何修飾符號,public也不加
2.當子類既需要實現介面又要繼承抽象類時,先使用extends繼承一個抽象類,而後使用implements實現多個介面。
3.一個抽象類可以使用implements實現多個介面,介面不能繼承抽象類
4.介面可以使用extends繼承多個介面(介面多繼承)
5.介面可以定義一系列的內部結構,包括:內部普通類,內部普通類,內部介面。其中,使用static定義的內
部介面就相當於一個外部介面。