在抽象类中实现接口

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 实现,除非被覆盖。