Java实现接口报错:非抽象类未重写接口抽象方法问题排查
问题根因与解决方案
报错翻译
原始报错内容:
Task is not abstract and does not override abstract method getPriority() in Priority
翻译后:
Task不是抽象类,且未重写Priority接口中的抽象方法getPriority()
根因说明
Java语法规定:非抽象类实现接口时,必须重写接口中定义的所有抽象方法。
你定义的Priority接口包含两个抽象方法:
public void setPriority()public void getPriority()
但实现该接口的Task类是非抽象类,仅重写了setPriority()方法,缺失了getPriority()的实现,因此触发编译报错。
修复方案
方案1:补全getPriority()方法实现(推荐)
在Task类中添加getPriority()的实现逻辑,可根据业务需求自定义方法内容,示例如下:
public class Task implements Priority { private int takeOutgarbage; private int drinkBeer; private int doHomework; private String message; // 原有setPriority实现保持不变,也可以直接复用接口定义的常量避免硬编码 public void setPriority(){ takeOutgarbage = low; drinkBeer = high; doHomework = medium; } // 新增getPriority实现 public void getPriority(){ // 示例逻辑:打印各个任务的优先级 System.out.println("倒垃圾优先级:" + takeOutgarbage); System.out.println("喝啤酒优先级:" + drinkBeer); System.out.println("写作业优先级:" + doHomework); } }
方案2:将Task类改为抽象类(仅适合无需直接实例化Task的场景)
如果暂时不需要实现该方法,且Task仅作为父类供子类继承,可以将其声明为抽象类,抽象类允许不实现接口的全部抽象方法:
// 新增abstract修饰符 public abstract class Task implements Priority { // 原有代码保持不变 }
其他注意事项
你提供的Prioritization类中的main方法没有加static修饰符,不符合Java程序入口方法的规范,后续运行还会触发错误,建议修改为:
public class Prioritization extends Task { // 新增static修饰符 public static void main(String[] args) { Prioritization p = new Prioritization(); p.setPriority(); p.getPriority(); } }
内容的提问来源于stack exchange,提问作者Noobprogrammer
相关产品推荐
相关产品推荐

