为什么以下java代码没有产生错误? (访问修饰符)

时间:2013-02-18 00:55:00

标签: java

class SomeClass1 {
  void method1() { }
  public void method2() { }
  private void method3() { }
  protected void method4() { }
}
class DemoClass{
  public static void main(String[] parameters) {
    SomeClass1 sc = new SomeClass1();
    sc.method1();
    sc.method2();
    sc.method4();
  }
}

受保护的方法只能由继承超类的类访问。正如我们在这里看到的,DemoClass不会扩展SomeClass。但是,它能够访问受保护的方法。这怎么可能?

2 个答案:

答案 0 :(得分:11)

那是因为它们在同一个包中:

  

protected修饰符指定只能在自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问。

Link to the documentation)。

答案 1 :(得分:2)

请参阅In Java, difference between default, public, protected, and private

基本上,可以从类,子类和包访问protected。这两个类在同一个包中,因此没有错误。