多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 6.5 `protected` 现在我们已理解了继承的概念,`protected`这个关键字最后终于有了意义。在理想情况下,`private`成员随时都是“私有”的,任何人不得访问。但在实际应用中,经常想把某些东西深深地藏起来,但同时允许访问派生类的成员。`protected`关键字可帮助我们做到这一点。它的意思是“它本身是私有的,但可由从这个类继承的任何东西或者同一个包内的其他任何东西访问”。也就是说,Java中的`protected`会成为进入“友好”状态。 我们采取的最好的做法是保持成员的`private`状态——无论如何都应保留对基 础的实现细节进行修改的权利。在这一前提下,可通过`protected`方法允许类的继承者进行受到控制的访问: ``` //: Orc.java // The protected keyword import java.util.*; class Villain { private int i; protected int read() { return i; } protected void set(int ii) { i = ii; } public Villain(int ii) { i = ii; } public int value(int m) { return m*i; } } public class Orc extends Villain { private int j; public Orc(int jj) { super(jj); j = jj; } public void change(int x) { set(x); } } ///:~ ``` 可以看到,`change()`拥有对`set()`的访问权限,因为它的属性是`protected`(受到保护的)。