0

我想为以下问题创建一个没有太多冗余的解决方案:

我有一个抽象类Unit、子类SubUnit1SubUnit2. 所有Units 都有一个maxValue,它不同于SubUnit1to SubUnit2,但对于同一子单元的所有实例在任何时候都应该是相同的。

我不想围绕这些值复制所有的 setter、getter 或某种方法,因为它们对于所有子类都是相同的。我也不想使用普通参数并将方法传递给子类并在必要时更新这些子类的每个实例。当我创建一个新实例时,以某种方式获取当前值。

有没有办法在父类中声明某种静态参数和方法,Unit在不同的子类中有所不同?

4

2 回答 2

1

您可以在接受 MAXVALUE 值的父类中定义受保护的构造函数

public abstract class Unit {
   private final int maximum;

   protected Unit(int maximum) {
      this.maximum = maximum;
   }

   public int getMaximum() {
      return maximum;
   }
}

然后在您的派生类中公开构造函数,这些构造函数使用固定值调用父构造函数,每个子类都是唯一的。

public class SubUnit1 {
   private static final int SUBUNIT1_MAX = 10;

   public SubUnit1() {
      super(SUBUNIT1_MAX);
   }
}
于 2013-02-16T17:43:13.910 回答
0

不,但是interface您可以使用一个 UNIT 应该有一个 MAXVALUE。

public interface IUnit
{
   public int getMaxValue();
}

public class SubUnit implements IUnit
{
   private static final int MAX_VALUE = 48;

   @Override
   public int getMaxValue() {
      return MAX_VALUE;
   }
}
于 2013-02-16T17:34:05.463 回答