2014-04-04 50 views
1

我不知道为什么在上下文中像下面为什么父类可能不受保护? (JAVA)

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

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

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

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

但私人和保护可以(并且经常是)应用到嵌套类和接口,只是从来没有顶级的类和接口

+2

准确的顶级课程。嵌套类可以是保护的或私有的。 –

+0

请注意,这不适用于内部类。 – Danstahr

+1

@JBNizet:已更正,谢谢纠正。 –

1

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

根据spec $8.1.1

访问修饰符公共(6.6节)仅适用于顶层类(第7.6节)并构件类(第8.5节),而不是本地类(§14.3)或匿名类(第15.9.5节)。

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

相关问题