相关疑难解决方法(0)

为什么Java中的"protected"修饰符允许访问同一个包中的其他类?

在Java中,具有"受保护"修饰符的成员不仅可以由同一个类和子类访问,还可以由同一个包中的每个人访问?

我想知道语言设计的原因,而不是实际的应用程序(例如,测试)

java inheritance protected

43
推荐指数
4
解决办法
7453
查看次数

勿让儿童接触:从继承中删除受保护的字段

本着精心设计的OO的精神,我正在扩展的某个类别标志着其中一个领域受到保护.这堂课还慷慨地提供了一个公共的二传手,但没有吸气剂.

我正在使用一个基类来扩展这个类,而基类又由几个孩子扩展.如何限制对我的孩子的受保护变量的访问,同时仍然能够私下操纵它并公开设置它?

见下面的例子:

public abstract class ThirdPartyClass {
  protected Map propertyMap;

  public void setPropertyMap(Map propertyMap){
    this.propertyMap= propertyMap;
  }

  // Other methods that use propertyMap.
}

public abstract class MyBaseClass extends ThirdPartyClass{
// Accessor methods for entries in propertyMap.
  public getFoo(){
    propertyMap.get("Foo");
  }

  public getBar(){
    propertyMap.get("Bar");
  }

 // etc...
}

public class OneOfManyChildren extends MyBaseClass {
// Should only access propertyMap via methods in MyBaseClass.
}
Run Code Online (Sandbox Code Playgroud)

我已经发现,我可以通过使场撤销访问private finalMyBaseClass.然而,这也妨碍了使用超级类提供的setter.

我能够通过下面的"聪明"来规避这种限制,但它也会导致维护相同地图的两个副本以及复制每个元素的O(n)操作.

public abstract class MyBaseClass extends ThirdPartyClass{

  private final …
Run Code Online (Sandbox Code Playgroud)

java inheritance encapsulation

7
推荐指数
2
解决办法
723
查看次数

标签 统计

inheritance ×2

java ×2

encapsulation ×1

protected ×1