Java - 继承的方法com.example.project.ConcreteA无法隐藏com.example.project.MyInterface中的抽象方法

标签 java inheritance interface access-modifiers

出于某种原因,我无法将接口(interface)中的方法声明为仅限包;它自动声明为公共(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...
    }
    
}

当我尝试编译它时,出现了这些错误,所有错误都相互关联:

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

Error: Cannot reduce the visibility of the inherited method from me.mathmaniac.everworlds.Block

File: C:\ProjectFolder\com\example\project\ConcreteA.java [line: 3]

Error: The inherited method com.example.project.SimpleConcrete.foo() cannot hide the public abstract method in com.example.project.MyInterface

File: C:\ProjectFolder\com\example\project\ConcreteB.java [line: 3]

Error: The inherited method com.example.project.SimpleConcrete.foo() cannot hide the public abstract method in com.example.project.MyInterface

有谁知道如何解决这个问题,或者我是否必须将我的接口(interface)对整个 Java 代码公开,而不仅仅是对包开放? 出于安全原因,我想让方法仅对包开放,但这是必要的,我会尝试找到另一种方式解决问题。

最佳答案

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

您可以通过如下声明来使接口(interface)成为包级别:

interface MyInterface {

    void foo();
    Thing bar();
}

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

关于Java - 继承的方法com.example.project.ConcreteA无法隐藏com.example.project.MyInterface中的抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28754751/

相关文章:

java - eclipse IDE 中的 HASHMAP 语法错误

java - 为什么我填充后得到空对象?

java - Android RecyclerView,基于OnClick改变 View 。

java - 添加新元素后,带有自定义 CellRenderer 的 Swing JList 消失

c++ - 继承和重载默认构造函数

JavaDoc 接口(interface)评论

java - 接口(interface)和类中的方法签名相同

java - 检查类是否实现接口(interface)

c# - oop 检查返回类型是父类还是子类

Python 设计指南 :