如何解决超类有私有方法时调用接口的默认方法
考虑下面的代码。
interface I {
default Number f() {
return 0;
}
}
class A {
private Number f() { // if Number is replaced with other type,all will work fine
return 1;
}
}
class B extends A implements I {
}
class Main {
public static void main(String[] args) {
System.out.println(new B().f());
}
}
Exception in thread "main" java.lang.IllegalAccessError: class tasks.a1.Main tried to access private method 'java.lang.Number tasks.a1.A.f()' (tasks.a1.Main and tasks.a1.A are in unnamed module of loader 'app')
at tasks.a1.Main.main(Sub.java:20)
但是如果将A.f()
的返回值替换为Integer
或Object
,则不会出错,会执行默认方法。
为什么在上面的代码片段中出现了 IllegalAccessError
,但在描述的修改之后一切正常?
问题 Calling default method in interface when having conflict with private method 中的两种方法具有相同的返回类型(即 void
),但我想知道为什么在使返回类型不同后错误消失了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。