【发布时间】:2015-04-29 13:20:38
【问题描述】:
由于某种原因,我不能将接口中的方法声明为仅包;它自动声明为公共。这是简化的代码:
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 [行:7]
错误:无法降低从 me.mathmaniac.everworlds.Block 继承的方法的可见性
文件: C:\ProjectFolder\com\example\project\ConcreteA.java [行:3]
错误:继承的方法com.example.project.SimpleConcrete.foo()无法隐藏com.example.project.MyInterface中的公共抽象方法
文件: C:\ProjectFolder\com\example\project\ConcreteB.java [行:3]
错误:继承的方法com.example.project.SimpleConcrete.foo()无法隐藏com.example.project.MyInterface中的公共抽象方法
有人知道如何解决这个问题,还是我必须让我的接口对整个 Java 代码公开,而不仅仅是对包开放? 出于安全原因,我想保持方法只对包开放,但需要,我会尝试找到另一种解决问题的方法。
【问题讨论】:
标签: java inheritance interface access-modifiers