为什么类或接口不能接收私有或受保护的访问修饰符?

ipk*_*iss 36 java access-modifiers

我正在阅读一些Java文本,文本说我们只能为类和接口应用publicdefault访问修饰符.因此,如果我们声明:它是一个编译错误:

private class A {}
Run Code Online (Sandbox Code Playgroud)

要么

protected class A{}
Run Code Online (Sandbox Code Playgroud)

我只是好奇为什么类或接口无法接收privateprotected访问修饰符?

Mic*_*ers 54

private 意思是"只在封闭类中可见".

protected 表示"仅在封闭类和任何子类中可见,并且也在封闭类的包中的任何位置".

private因此,当应用于顶级课程时没有任何意义; 同样适用于定义的第一部分protected.第二部分protected 可以应用,但它由默认(包保护)修饰符覆盖,因此protected部分无意义且部分冗余.

双方privateprotected可以(并且经常是)应用到嵌套类和接口,只是从来没有顶级类和接口.


Hun*_*len 15

顶级类只能拥有publicdefault访问,但内部类可以具有private access:

public class TestClassAccess
{
    public static void main(String[] args)
    {
        new TestClassAccess().new TestClassPrivateAccess();
    }

    private class TestClassPrivateAccess
    {
        TestClassPrivateAccess()
        {
            System.out.println("I'm a private class");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 很好的例子.内部类也可以是静态的.内部接口和枚举是隐式静态的. (3认同)

Oak*_*tes 5

顶层只有两个用于类可见性的用例(a)在任何地方都可见(b)仅在包内可见.因此只有两个修饰符(public和默认值).如果是public,那么所有类都可以看到它.如果没有访问修饰符,则仅对同一包中的类可见.

如果在顶层有更多用于类可见性的用例,Java语言将提供更多修饰符.