Java 免费访问受保护的成员

Java 免费访问受保护的成员,java,protected,Java,Protected,我创建了一个类,它有几个受保护的成员,其他类可以完全访问这些成员: class MyClass { protected String name; } 在我看来,这不应该编译: MyClass mc = new MyClass(); mc.name = "foo"; 但它很好用。当我将成员设置为私有时,它会按预期工作。这怎么可能 一些注释,但它们不应该有任何区别,我认为: mc位于HashMap中 我在活动中访问它 受保护的成员可以在子类(在相同或不同的包中)以及同一包中的所有类中访

我创建了一个类,它有几个受保护的成员,其他类可以完全访问这些成员:

class MyClass {
    protected String name;
}
在我看来,这不应该编译:

MyClass mc = new MyClass();
mc.name = "foo";
但它很好用。当我将成员设置为私有时,它会按预期工作。这怎么可能

一些注释,但它们不应该有任何区别,我认为:

  • mc
    位于
    HashMap
  • 我在
    活动中访问它

受保护的
成员可以在子类(在相同或不同的包中)以及同一包中的所有类中访问。如果您将代码移动到另一个包中,您将获得预期的行为


请参阅。

oracle文档将受保护定义为以下内容:

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

看到这个了吗


这意味着如果您将类移动到另一个包中,您将无法访问该名称。

这就解释了一切。谢谢我想它不同于C#/C++,这是我学习这个概念的地方。