为什么父类可能不受保护? (JAVA)

时间:2014-04-04 09:33:13

标签: java oop protected

我不确定为什么会出现以下情况

class Parent {

    private void method1() {
        System.out.println("Parent's method1()");
    }


    public void method2() {
        System.out.println("Parent's method2()");
    }   

}


public class Child extends Parent {

    public void method1() {
        System.out.println("Child's method1()");                
    }


    public static void main(String args[]) {
        Parent p = new Child();
        p.method2();
    }

}

可能是包私有,但不受保护。

具体而言,产生的错误是

  

此处不允许使用修饰符

哪些似乎表示这是一个访问权限问题 - 但我怀疑这可能是一个红色的鲱鱼。 Private修饰符也会自然生成错误。

2 个答案:

答案 0 :(得分:2)

在Java中,顶级类只能包私有和公共修饰符。

制作课程private没有任何意义。如果没有人出于任何原因使用该类,那么为什么我们需要该类?

protected访问修饰符意味着,只能在封闭类和任何子类中以及封闭类的包中的任何位置可见。没有人知道哪些类将成为受保护类的子类。所以,它也没有意义

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

答案 1 :(得分:1)

您不能将受保护的访问修饰符用于顶级类。

根据spec $8.1.1

  

访问修饰符public(第6.6节)仅适用于顶级类(第7.6节)和成员类(第8.5节),不适用于本地类(第14.3节)或匿名类(第15.9.5节)。 p>      

受保护的访问修饰符和私有(第6.6节)仅适用于   直接封闭类或枚举声明中的成员类   (第8.5节)。