2013-10-07 129 views
0

我创建一个类,有几个protected成员,是完全提供给其他类:免费访问受保护的成员

class MyClass { 
    protected String name; 
} 

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

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

但它工作正常。当我使会员private,它按预期工作。这怎么可能?

的几个注意事项,但不应有任何区别,我认为:

  • mc里面有个HashMap
  • 我访问它内部的Activity

回答

6

protected成员(相同或不同包装)和所有类别在同一包。如果您将该代码移动到其他软件包中,您将获得预期的行为。

参见Access Control

+0

那么,这解释了一切。谢谢。我想它与C#/ C++不同,后者是我学习这个概念的地方。 –

+0

@BartFriederichs不客气:) –

2

的甲骨文档是定义保护为followes:

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

看到这个Link

如果您移动类到另一包则不能存取权限名称这意味着。