【发布时间】:2016-04-10 08:42:05
【问题描述】:
SubclassOne扩展ClassOne并实现InterfaceOne,两者都有void doSomething(){}方法。但是,编译器显示错误信息,
ClassOne 中的 doSomething() 无法实现 doSomething() InterfaceOne,试图分配较弱的访问权限,是公开的
有人能告诉我为什么编译器会显示这个特定的消息吗?背后的原因是什么?
public class ClassOne {
void doSomething(){
System.out.println("do something from InterfaceMethod class");
}
}
public interface InterfaceOne {
default void doSomething(){
System.out.println("do something from InterfaceOne");
}
}
public class SubclassOne extends ClassOne implements InterfaceOne{
public static void main(String[] args) {
}
}
【问题讨论】:
-
接口中的方法隐式为
public。 -
我认为问题是关于 classone 没有实现 interfaceone,但仍然出现错误。它不是那个的副本
-
@TamasHegedus 错误不在
ClassOne中。该消息仅引用ClassOne,因为SubclassOne试图覆盖它。错误出现在SubclassOne中,用于将doSomething继承为私有包并尝试将其实现为public以实现InterfaceOne。这是一个完全相同的副本。 -
@Pillar 所以发生这种情况是因为接口中存在默认实现。有趣的。我认为应该在答案中指出这一点
-
@TamasHegedus 不,这与
default无关。如果只是一个没有default的标准方法声明,也会出现同样的错误。
标签: java interface subclass superclass