免费访问受保护的成员

时间:2013-10-07 20:04:01

标签: java protected

我创建了一个具有少量protected成员的类,其他类完全可以访问:

class MyClass {
    protected String name;
}

在我看来,这不应该编译:

MyClass mc = new MyClass();
mc.name = "foo";

但它运作正常。当我创建成员private时,它按预期工作。怎么会这样?

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

  • mc位于HashMap
  • 我在Activity
  • 中访问它

2 个答案:

答案 0 :(得分:6)

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

请参阅Access Control

答案 1 :(得分:2)

oracle文档定义受保护的跟随者:

  

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

请参阅此Link

这意味着如果您将班级移至另一个套餐,则无法访问该名称。