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

Tar*_*das 1 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 11

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

所述protected修饰符指定了构件只能在其自己的封装件内被访问的(与包专用),此外,通过它的类的另一个包的子类.

(链接到文档).