为什么私有内部接口的方法必须公开?

时间:2013-08-22 09:35:56

标签: java

我有一个实现私有内部接口的私有内部类。我通常省略私有内部类中的私有修饰符以使代码更清晰。不幸的是,在这种情况下,我得到“无法降低可见性错误”,即使我实际上并没有降低可见性。

public class Foo {
    private interface IBar{
        void foo();
    }

    private static class Bar implements IBar{
        @Override
        public void foo() { // Must be public :(
        }
    }
}

我认为没有办法解决这个问题?

3 个答案:

答案 0 :(得分:7)

界面的所有方法都是publicabstract。这是规则。

只有使它们成为public才有意义,因为它们是通过实现可能来自不同包的类来实现的。

即使它是内部interface,它仍然是interface所以规则不会改变。

答案 1 :(得分:1)

接口上的所有方法都必须声明为public。未在foo方法上指定访问修饰符会导致默认情况下为其分配package protected访问权限。由于package protected的可访问性低于public,因此代码会降低foo方法的可访问性。

答案 2 :(得分:0)

inteface的所有方法都是publicabstract。如果您没有定义任何修饰符,则默认情况下为publicabstract

覆盖的一般规则是您无法降低方法可见性。如果你没有定义任何修饰符,那么在一个类中,默认情况下它将是默认值,默认值比public更不可见。所以这里必须公开