1. 程式人生 > >java學習筆記(七)--(抽象類與介面下)(介面的定義與使用)

java學習筆記(七)--(抽象類與介面下)(介面的定義與使用)

介面的定義與使用

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

  • 介面的定義(JDK8以前):介面就是抽象方法與全域性常量的集合(純粹版的抽象類),interfance關鍵字定義介面

interface IMessage{
    //全域性常量
    public static final String MSG ="I am a biter";
    //抽象方法
    public abstract void print();
}

介面命名:介面使用 I 開頭

子類要想使用介面,implements實現介面,一個子類可以同時實現多個父介面(避免單繼承侷限,實現多繼承)

父介面的相互轉換,前提兩個父介面擁有必須共同實現子類

interface IMessage{
    //全域性常量
    public static final String MSG ="I am a biter";
    //抽象方法
    public abstract void print();
}
interface INews{
    public abstract String getNews();
}
class MessageImpl implements IMessage,INews{
    public void print(){
        System.out.println(IMessage.MSG);
    }
    public String getNews(){
        return IMessage.MSG;
    }
}
public class Test{
    public static void main(String[] args){
        //子類向上轉型,為父介面例項化物件
        IMessage m=new MessageImpl();
        //呼叫被子類覆寫的方法
        m.print();
        //父介面相互轉換
        INews n=(INews) m;
        System.out.println(n.getNews());
    }
}

父介面相互轉化示意圖:

子類的命名規範:介面名為 IMyInterfance,子類實現此介面命名為:MyInterfaceImpl

介面的使用限制:

  • 介面中只允許public許可權(不顧是常量還是方法,都是public許可權,即便不寫許可權修飾符也是public),在其餘方法中預設為default許可權。

interface IMessage{
    abstract void print();
}
class MessageImpl implements IMessage{
    //該方法預設為default許可權,無法覆寫父類
    void print(){
        System.out.println("Hello");
    }
}
public class Test{
    public static void main(String[] args){
        IMessage m=new MessageImpl();
    }
}

           阿里編碼規約:介面中不要出現任何修飾符,public也不要加

  • 當子類既需要實現介面又需要繼承抽象類時,請先使用extends整合一個抽象類,而後使用implements實現多個介面

  • 一個抽象類可以使用implements實現多個介面,介面不能繼承抽象類

  • 介面可以使用extends繼承多個父介面(介面多繼承)

抽象類的應用:子類和基類為 is a 的關係

介面的應用場合

  • 定義操作標準(USB標準,停車場標準)

  • 表示能力

  • (瞭解)分散式開發中暴露遠端方法

interface Car{
    public void inter();
    public void count();
    public void charge();
}
class truck implements Car{
    public void inter(){
        System.out.println("進入一個卡車!");
    }
    public void count(){
        System.out.println("開始計時!");
    }
    public void charge(){
        System.out.println("收費!");
    }
}
class Taxi implements Car{
    public void inter(){
        System.out.println("進入一個計程車!");
    }
    public void count(){
        System.out.println("開始計時!");
    }
    public void charge(){
        System.out.println("收費!");
    }
}
public class Test{
    public void Parking(Car car){
        car.inter();
        car.count();
        car.charge();
    }
    public static void main(String[] args){
        Test clint=new Test();
        clint.Parking(new truck());
        clint.Parking(new Taxi());;
    }
}