我有一个实现私有内部接口的私有内部类。我通常省略私有内部类中的私有修饰符以使代码更清晰。不幸的是,在这种情况下,我得到“无法降低可见性错误”,即使我实际上并没有降低可见性。
public class Foo {
private interface IBar{
void foo();
}
private static class Bar implements IBar{
@Override
public void foo() { // Must be public :(
}
}
}
我认为没有办法解决这个问题?
答案 0 :(得分:7)
界面的所有方法都是public
和abstract
。这是规则。
只有使它们成为public
才有意义,因为它们是通过实现可能来自不同包的类来实现的。
即使它是内部interface
,它仍然是interface
所以规则不会改变。
答案 1 :(得分:1)
接口上的所有方法都必须声明为public
。未在foo
方法上指定访问修饰符会导致默认情况下为其分配package protected
访问权限。由于package protected
的可访问性低于public
,因此代码会降低foo
方法的可访问性。
答案 2 :(得分:0)
inteface
的所有方法都是public
和abstract
。如果您没有定义任何修饰符,则默认情况下为public
和abstract
。
覆盖的一般规则是您无法降低方法可见性。如果你没有定义任何修饰符,那么在一个类中,默认情况下它将是默认值,默认值比public更不可见。所以这里必须公开