1. 程式人生 > >Java——介面的定義與使用

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定義的內
部介面就相當於一個外部介面。