在抽象类中实现接口
interface
中定义的方法默认为 public abstract
。当 abstract class
实现了 interface
时,interface
中定义的任何方法都不必由 abstract class
实现。这是因为声明为 abstract
的 class
可以包含抽象方法声明。因此,第一个具体子类的责任是实现从任何接口和/或 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
实现,除非被覆盖。