Java在抽象类中实现接口

示例

interface默认情况下,在中定义的方法是public abstract。当abstract class实现时interface,interface无需实现中定义的任何方法abstract class。这是因为class被声明的aabstract可以包含抽象方法声明。因此,第一个具体子类的责任是实现abstract从任何接口和/或继承的任何方法abstract class。

public interface NoiseMaker {
    void makeNoise();
}

public abstract class Animal implements NoiseMaker {
    //不需要声明或实现makeNoise()
    public abstract void eat();
}

//因为Dog是具体的,所以它必须同时定义makeNoise()和eat()
public class Dog extends Animal {
    @Override
    public void makeNoise() {
        System.out.println("Borf borf");
    }

    @Override
    public void eat() {
        System.out.println("狗吃一些粗磨。");
    }
}

从Java 8开始,可以interface声明default方法的实现,这意味着该方法将不是abstract,因此任何具体的子类都不会被强制实现该方法,而是会继承default实现,除非被覆盖。