Class ‘XXX‘ must either be declared abstract or implement abstract method ‘xxx‘

13 篇文章 1 订阅

最近引入外部jar包,继承抽象类时出现这个问题,Class ‘XXX’ must either be declared abstract or implement abstract method ‘xxx’,这里IDEA给提示了,该类需要被申明为抽象的,或者实现父类的 ‘xxx’ 方法(抽象方法)。
在这里插入图片描述

问题:

这里我们不想申明该子类为抽象类,也实现了父类的抽象方法,可还是有这个问题。

解决办法:

后来发现是作用域的问题,父类的抽象方法没有显示表明为public,而是默认default,又因为该父类方法是外部包的抽象类,导致不能继承其默认的抽象方法

总结:

继承外部抽象类时要注意,父类的抽象方法一定要带上public关键字,避免打包后别人使用异常。


附:回顾抽象类和作用域相关知识

抽象类
  • 所有抽象类必须有子类(abstract与final 不能同时出现,若同时出现则在编译时报错)被final修饰的类不能有子类(终结器);
  • 当抽象类的子类不是抽象类时,抽象类的子类必须覆写抽象类的所有抽象方法;
  • 抽象类可以使用子类向上转型为其实例化,抽象类一定不能直接实例化对象(无论是否有抽象方法);
  • 由于抽象类强制要求子类覆写抽象方法,因此abstract与private 不能一起使用。
作用域
作用域与可见性当前类同一package子类其他package
public
protected×
default××
private×××
protected & default
  • protected:表名成员变量或方法对该类自身,与它在同一个包中的其他类,在其他包中的该类的子类都可见
  • defaul:表明该成员变量或方法只有自己和与其位于同一包内的类可见。
    若父类与子类处于同一包内,则子类对父类的default成员变量或方法都有访问权限;若父类与子类处于不同的package内,则没有访问权限
  • private和protected不能用来修饰类
abstract 与 implements的区别
区别抽象类接口
关键字abstractinterface
成员变量对成员变量没有特别要求和限制只能包含公共静态变量(默认由public static final修饰)
方法可包含任意方法只能包含且抽象的方法(默认由public abstract修饰)
使用一个类只能继承一个抽象类一个类可以实现多个接口

参考:
1、入坑Java(八)abstract & implements
2、Java中的作用域有哪些
3、抽象类

  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值