1. 程式人生 > >java ——介面的定義和使用

java ——介面的定義和使用

為了實現像c++中的多繼承性,Java中引入了介面的概念,介面和單重繼承相結合很好的實現了多重繼承的功能。介面和類非常相似,介面用於定義幾個類具有的但又不再這些類中定義的功能,通過在介面中設定這些方法,描述出共同的特性,然後由類本身定義如何實現。

介面優先原則: 在一個操作既可以使用抽象類又可以使用介面的時候,優先考慮使用介面。

介面定義: 介面就是由一個抽象方法與全域性常量組成的特殊類(JDK8之前)介面使用interface引導,分為介面宣告和介面體。在介面體中只進行方法的宣告,不能進行方法的實現。

有關介面的定義要注意以下幾點:

1.Interface是宣告介面的關鍵字,可以把它看成一個特殊的類。
2.宣告介面可給出訪問控制符,用public修飾的是公共介面,可以被所有的類和介面使用。若介面宣告為public,那麼介面中的方法和變數也全部為public。如果是預設修飾符的介面,則只能被同一個包中的其他類和介面使用。(一句話:介面可以用訪問控制符宣告)


3.介面名要求符合Java識別符號的規定。(一句話: 介面前加 “ I(大寫i) ” 來區分介面與類)
4.介面也具有繼承性,定義一個介面時,可以通過extends關鍵字宣告該介面是某個已經存在的父介面或派生介面,它將繼承父介面所有的屬性和方法,一個介面還可以繼承多個父介面,父介面間用逗號隔開。(一句話:介面具有繼承性,用extends連線)
5.系統預設介面中所有屬性的修飾符都是public static final。
6.系統預設介面中所有方法的修飾符都是public abstract。
7.在介面中對抽象方法宣告時,只能給出這些抽象方法的方法名、返回值和引數列表,而不能定義方法體,即這些介面僅僅只是規定了一組資訊的交換、傳輸和處理的“介面”。通常把對介面功能的”繼承“稱為”實現“。 (一句話:只有方法宣告,沒有方法實現)

介面的命名規範: 介面前加 “ I(大寫i) ” 來區分介面與類

子類實現介面使用implements關鍵字,並且子類可以同時實現多個父介面(可以使用介面來實現多繼承)一般使用 介面名+Impl 來命名子類

interface IMyInterface{
    public static final String MSG = "test";
    public abstract void test();
}
interface INews{
    public abstract void getNews();
}
class MyInterfaceImpl implements IMyInterface,INews{ //子類實現兩個介面
    public void test(){
        System.out.println(MSG);
    }
    public void getNews(){
        System.out.println(MSG);
    }
}
public class Test{
    public static void main(String[] args){
        IMyInterface myInterface = new MyInterfaceImpl();
        myInterface.test();
        INews news = new MyInterfaceImpl();
        news.getNews();
    }
}
//---------------------------
public class Test{
    public static void main(String[] args){
    IMyInterface myInterface = new MyInterfaceImpl();
    //父介面的相互轉換
    INews news = (INews)myInterface;   //因為它們有相同的子類,所以之間可以相互轉換
    news.getNews();
    }
}

1.介面的使用限制

一個類實現一個介面,必須給出介面中所有方法的實現。如果不能實現某方法。也必須寫出一個空方法。
Java中允許多個類實現同一個介面,這些類之間可以是無聯絡的,每個類各有自己實現方法的細節,這是與繼承機制的不同之處。

介面中只有public許可權(不管是屬性還是方法,其許可權均為public,類中預設是的default)

介面中public 、static 、 final 、 abstract 均可以省略。

阿里編碼規約:介面中方法和屬性不要加任何修飾符,public也不要加,保證程式碼簡潔性。

//完整格式
interface IMessage{
    public static final String MSG = "i am a biter";
    public abstract void print();
}

//簡化格式
interface IMessage{
   String MSG = "i am a biter";
   void print();
}

1.1.2

當一個子類既需要實現介面又需要繼承抽象類時:

第一步:請先使用extends繼承一個抽象類;

第二步:使用implements實現多個介面。

1.1.3

抽象類可以使用implements實現介面,但是介面不能繼承(extends)抽象類。

interface IMyInterface{ //介面
    String MSG = "test";
     void test();
}
abstract class News implements IMyInterface{  //抽象類實現介面
    public abstract void getNews();
}
class MyInterfaceImpl extends News{  //子類繼承抽象類
    public void test(){
        System.out.println(MSG);
    }
    public void getNews(){
        System.out.println(MSG);
    }
}

1.1.4

介面不可以繼承抽象類,介面可以繼承介面。

interface A{
     void test1();
}
interface B{
     void test1();
}
interface C extends A,B{
     void test3();
}
class D extends C{
    //D要覆寫三個介面
}

介面應用

  • 定義操作標準(USB2.0標準)

  • 表示一種能力,進行一項操作

  • 在分散式開發中暴露遠端服務方法