ipk*_*iss 36 java access-modifiers
我正在阅读一些Java文本,文本说我们只能为类和接口应用public或default访问修饰符.因此,如果我们声明:它是一个编译错误:
private class A {}
Run Code Online (Sandbox Code Playgroud)
要么
protected class A{}
Run Code Online (Sandbox Code Playgroud)
我只是好奇为什么类或接口无法接收private或protected访问修饰符?
Mic*_*ers 54
private 意思是"只在封闭类中可见".
protected 表示"仅在封闭类和任何子类中可见,并且也在封闭类的包中的任何位置".
private因此,当应用于顶级课程时没有任何意义; 同样适用于定义的第一部分protected.第二部分protected 可以应用,但它由默认(包保护)修饰符覆盖,因此protected部分无意义且部分冗余.
双方private并protected可以(并且经常是)应用到嵌套类和接口,只是从来没有顶级类和接口.
Hun*_*len 15
顶级类只能拥有public或default访问,但内部类可以具有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)
顶层只有两个用于类可见性的用例(a)在任何地方都可见(b)仅在包内可见.因此只有两个修饰符(public和默认值).如果是public,那么所有类都可以看到它.如果没有访问修饰符,则仅对同一包中的类可见.
如果在顶层有更多用于类可见性的用例,Java语言将提供更多修饰符.