Java-继承的方法com.example.project.ConcreteA无法隐藏com.example.pro.M



由于某些原因,我不能将接口中的方法仅声明为包;它自动声明为public。这是简化的代码:

package com.example.project;
public interface MyInterface {
    void foo();
    Thing bar(); // The class Thing is in the com.example.project package, but what it does isn't important.
}

package com.example.project;
public abstract class SimpleConcrete implements MyInterface { // Initializes all methods as hooks
    
    protected Thing bar = new Thing();
    
    void foo() {}
    Thing bar() { return bar }
    
}
    

package com.example.project;
public class ConcreteA extends SimpleConcrete {
    
    void bar() {
        // code here...
    }
    
}

package com.example.project;
public class ConcreteB extends SimpleConcrete {
    
    void bar() {
        // more code here...
    }
    
}

当我试图编译这个时,这些错误来了,所有的连接:

文件:C:\ProjectFolder.com\example\project\SimpleConcrete.java[line:7]

错误:无法降低从me.mathmaniac.everworlds.Block 继承的方法的可见性

文件:C:\ProjectFolder.com\example\project\CconcreteA.java[line:3]

错误:继承的方法com.example.project.SimpleConcrete.foo()无法隐藏com.example.pro中的公共抽象方法。MyInterface

文件:C:\ProjectFolder.com\example\project\CretreteeB.java[line:3]

错误:继承的方法com.example.project.SimpleConcrete.foo()无法隐藏com.example.pro中的公共抽象方法。MyInterface

有人知道如何解决这个问题吗?或者我必须让我的接口对整个Java代码公开,而不仅仅是对包开放吗?出于安全原因,我想只对包开放这些方法,但如果需要,我会尝试用另一种方法来解决问题。

Java接口中的所有方法都是隐式公共的。请参阅此处了解更多信息:http://docs.oracle.com/javase/tutorial/java/IandI/interfaceDef.html

您可以这样声明接口包级别:

interface MyInterface {
    void foo();
    Thing bar();
}

这样至少可以将其封装在该包中。

接口中声明的所有方法都是隐式public

接口中的所有抽象、默认和静态方法都是隐式public,因此可以省略public修饰符。

若要在方法上使用任何其他访问修饰符,必须将接口转换为abstract类,并将方法转换为abstract方法。

相关内容

最新更新