我正在阅读一些Java文本,文中说我们只能为类和接口应用public
或default
访问修饰符。因此,如果我们声明:
private class A {}
或
protected class A{}
我很好奇为什么课程或界面无法接收private
或protected
访问修饰符?
答案 0 :(得分:54)
private
表示“仅在封闭类中可见”。
protected
表示“仅在封闭类和任何子类中可见,并且也在封闭类的包中的任何位置”。
private
在应用于顶级课程时没有意义;同样适用于protected
定义的第一部分。 protected
的第二部分可以应用,但它由默认(受包保护)修饰符覆盖,因此protected
部分无意义且部分冗余。
private
和protected
都可以(并经常)应用于嵌套类和接口,而不是顶级类和接口。
答案 1 :(得分: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");
}
}
}
答案 2 :(得分:5)
顶层只有两个用于类可见性的用例(a)在任何地方都可见(b)仅在包内可见。因此只有两个修饰符(public
和默认值)。如果class为public
,则所有类都可以看到它。如果没有访问修饰符,则仅对同一包中的类可见。
如果在顶层有更多用于类可见性的用例,Java语言将提供更多修饰符。