Java基礎篇:接口

Java基礎篇:接口

介紹

Java 中的 接口 定義爲用於指定實現類行爲的抽象類型,Java接口包含 靜態常量抽象方法 , 1.8以後還有 默認方法靜態方法 。一個類能夠實現多個接口。
在Java中,接口是使用 interface 關鍵字聲明的。在 JDK8 以前接口中的全部方法都是 隱式公開抽象 的, 1.8版本以後能夠在接口中定義靜態方法與使用 default 聲明的帶 方法體 的方法。java

  • 靜態常量
  • 抽象方法
  • 默認方法
  • 靜態方法

使用

抽取一系列對象的公共特徵, 聲明方法後進行統一實現, 例如貓和老鼠都是動物, 均可以爬或者叫等等, 這個時候咱們定義一個動物接口, 聲明爬行和叫聲的公共抽象方法, 建立貓和老鼠的類進行實現動物接口 markdown

優勢: 當增長一個公共抽象方法, 例如在動物接口中增長 毛色 方法, 這樣咱們不用去用腦去記憶有多少動物實現了它, 由於編譯的時候會報錯誤, 很清晰的給動物實現類增長方法, 而無需去擔憂漏掉某個動物沒有毛色 ide

代碼實現: code

interface Animal {
    public void move();
}

class Cat implements Animal {
    public void move(){
        System.out.println("貓行走的方法...");
    }    
}

class Dog implements Animal {
    public void move(){
        System.out.println("狗行走的方法...");
    }    
}

給動物增長一個毛色 對象

interface Animal {
    // ...其餘方法
    public void color();
}

這個時候若是CatDog類若是不重寫color方法的話,就會編譯報錯 blog

新特性::默認方法

之前的接口向後兼容性很差, 例如我想在動物類中增長一個如何食用該動物, 那麼總不能每一個動物都要實現吧, 因此就須要這種能夠不實現這個方法接口

interface Animal {
    default void howToEat(){
        System.out.println("Animal:實現了這個接口的類能夠不實現這個方法");
    }
}

那麼問題來了, 假若有一個兔子類, 在實現了Animal的同時又實現了Mammal(哺乳動物), 而兩個接口中都包含howToEat方法 get

interface Mammal {
    default void howToEat(){
        // 實現了這個接口的類能夠不實現這個方法
        System.out.println("Mammal:哺乳動物食用方法...");
    }
}
public class Rabbit implements Animal, Mammal{

}

上述代碼編譯出錯, 以下: it

錯誤信息

這個時候咱們就要重寫howToEat方法了 編譯

public class Rabbit implements Animal, Mammal {
    @Override
    public void howToEat() {
        System.out.println("麻辣兔頭");
    }
}

新特性::靜態方法

假如我想獲取哺乳動物的腿的數量, 我又不想去調取其實現類, 或者每一個實現類寫其有幾條腿或者爪子什麼之類的

public interface Mammal {
    static int getLegByName(String name) {
        switch (name) {
            case "兔子":
                return 4;
            case "鴨子":
                return 2;
            default:
                return 0;
        }
    }
}

總結

  • 接口固定了實現類對指定方法的實現特徵
  • jdk8新特性, 能夠在接口中定義靜態方法與默認方法
相關文章
相關標籤/搜索