什么成为子类中受保护成员的可见性?

What becomes the visibility of protected members in a subclass?

我有一个 class A 和一个受保护的成员 :

package p1;   
public class A{
      protected int number;
}

现在我已将其子class编辑到另一个包中:

package p2;
public class B extends A{}

现在主要 class :

package p3;
public class Main{
   public static void main(String[] args){
        B b = new B();
        System.out.println(b.number);
   }
} 

这执行得很好。受保护成员在 subclass 中的可见性是多少 - 他们会变成 public 吗? 然后我尝试了以下也没有显示任何错误:

 System.out.println(new A().number);

看到这个之后我得出结论,我正在做一些非常愚蠢的事情或者误解了 protected 说明符的使用。我的学习方式:protected 成员只能在 subclasses 中访问,与包无关,并且它们保持相同的可用性。但是即使在父 class.

中,我也能够像访问 public 变量一样访问成员 number 的方式

请帮助我了解这里发生的事情。

在超类class中声明为受保护的变量、方法和构造函数只能由其他包中的子class或包中的任何class访问受保护成员的 class.

您可以阅读更多相关内容here