1

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

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

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

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

4

3 回答 3

7

接口的所有方法都是publicabstract。这就是规则。

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

即使它是一个内在的interface,它仍然是interface所以规则不会改变。

于 2013-08-22T09:37:07.197 回答
1

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

于 2013-08-22T09:37:45.073 回答
0

an 的所有方法inteface都是publicabstract。如果您没有定义任何修饰符,那么默认情况下它是publicand abstract

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

于 2013-08-22T09:43:19.143 回答