实现接口的抽象父类的抽象子类是否需定义接口抽象方法
问题解答
核心结论
不需要在抽象子类中强制实现父类所实现接口的抽象方法。
抽象类本身支持保留未实现的抽象方法,仅要求继承链最终的非抽象实现类完成所有接口方法、父类抽象方法的实现即可。
代码示例(以Java为例)
- 首先定义基础接口
public interface AnimalInterface { // 接口定义的3个抽象方法 void eat(); void sleep(); void run(); }
- 实现接口的抽象父类
public abstract class AbstractAnimal implements AnimalInterface { // 父类仅实现接口的其中1个方法 @Override public void sleep() { System.out.println("动物正在睡觉"); } // eat、run方法未实现,自动作为抽象方法存在于当前抽象类中 }
- 继承抽象父类的抽象子类
public abstract class AbstractMammal extends AbstractAnimal { // 无需强制实现接口中未完成的eat、run方法 // 可额外定义子类特有的抽象方法 public abstract void lactate(); }
- 最终非抽象实现类(必须实现所有未完成的抽象方法)
public class Dog extends AbstractMammal { // 实现接口剩余的抽象方法 @Override public void eat() { System.out.println("狗吃骨头"); } @Override public void run() { System.out.println("狗在奔跑"); } // 实现抽象子类自定义的抽象方法 @Override public void lactate() { System.out.println("母狗可以分泌乳汁喂养幼崽"); } }
特殊说明
- 如果需要在抽象子类中调整某个接口方法的通用行为,可以主动重写该方法,无需等到最终实现类处理
- JDK8及以上版本接口支持default默认实现,抽象类可以自主选择是否重写这类默认方法
内容的提问来源于stack exchange,提问作者Jackie Pan
相关产品推荐
相关产品推荐

