在抽象類中實現介面

interface 中定義的方法預設為 public abstract。當 abstract class 實現了 interface 時,interface 中定義的任何方法都不必由 abstract class 實現。這是因為宣告為 abstractclass 可以包含抽象方法宣告。因此,第一個具體子類的責任是實現從任何介面和/或 abstract class 繼承的任何 abstract 方法。

public interface NoiseMaker {
    void makeNoise();
}

public abstract class Animal implements NoiseMaker {
    //Does not need to declare or implement makeNoise()
    public abstract void eat();
}

//Because Dog is concrete, it must define both makeNoise() and eat()
public class Dog extends Animal {
    @Override
    public void makeNoise() {
        System.out.println("Borf borf");
    }

    @Override
    public void eat() {
        System.out.println("Dog eats some kibble.");
    }
}

從 Java 8 開始,interface 可以宣告方法的 default 實現,這意味著該方法不會是 abstract,因此任何具體的子類都不會被強制實現該方法,但會繼承 default 實現,除非被覆蓋。