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

时间:2011-07-18 14:54:13

标签: java access-modifiers

我正在阅读一些Java文本,文中说我们只能为类和接口应用publicdefault访问修饰符。因此,如果我们声明:

,这是一个编译错误
private class A {}

protected class A{}

我很好奇为什么课程或界面无法接收privateprotected访问修饰符?

3 个答案:

答案 0 :(得分:54)

private表示“仅在封闭类中可见”。

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

因此,

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

privateprotected都可以(并经常)应用于嵌套类和接口,而不是顶级类和接口。

答案 1 :(得分: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");
        }
    }
}

答案 2 :(得分:5)

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

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