Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ClassOne中的doSomething()可以';t在InterfaceOne中实现doSomething(),尝试分配较弱的访问权限,是公共的_Java_Interface_Subclass_Superclass - Fatal编程技术网

Java ClassOne中的doSomething()可以';t在InterfaceOne中实现doSomething(),尝试分配较弱的访问权限,是公共的

Java ClassOne中的doSomething()可以';t在InterfaceOne中实现doSomething(),尝试分配较弱的访问权限,是公共的,java,interface,subclass,superclass,Java,Interface,Subclass,Superclass,子类扩展了ClassOne并实现了InterfaceOne,两者都有一个void doSomething(){}方法。但是,编译器会显示错误消息 ClassOne中的doSomething()无法在中实现doSomething() 试图分配较弱访问权限的InterfaceOne是公共的 有人能告诉我为什么编译器会显示这个消息吗?背后的原因是什么 public class ClassOne { void doSomething(){ System.out.println("

子类
扩展了
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

public class ClassOne {
    public void doSomething(){
        System.out.println("do something from InterfaceMethod class");
    }
}

您可以在

中看到访问修饰符表。在这种情况下,
子类
将提供一个同时满足超类和接口的实现。因此,由于两个方法的访问修饰符存在冲突,因此您会收到这样的错误消息


(你的
ClassOne
的访问修饰符不是
public
。它的包是可见的。)

接口中的方法是隐式
public
。我认为问题在于ClassOne没有实现interfaceone,但仍然会出错。它不是一个复制品that@TamasHegedus错误不在
ClassOne
中。该消息只是指
ClassOne
,因为
SubclassOne
正试图覆盖它。错误在
子类
中,该子类将
doSomething
继承为包私有,并尝试将其实现为
公共
用于
接口One
。这是一个完全相同的结果,之所以会出现这种情况,是因为接口中存在默认的实现。有趣。我认为应该在一份报告中指出这一点answer@TamasHegedus不,这与默认值无关。如果它只是一个没有默认值的标准方法声明,那么同样的错误也会发生。@我不认为它是重复的。至少不是你标记为重复的。为什么不呢?他们在问同样的问题。在另一篇文章中,OP没有在接口和父类之间的冲突中得到错误。效果是一样的。当接口要求方法是
公共的时,有一个类在包private中实现方法(无论是通过继承还是直接实现)。我们不需要再问这个问题了,我想我们会同意不同意的。