在子类中具有不同值的静态参数

时间:2013-02-16 17:31:30

标签: java parameters static subclass

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

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

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

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

2 个答案:

答案 0 :(得分: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);
   }
}

答案 1 :(得分: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;
   }
}