【问题标题】:Static parameter with different values in subclasses子类中具有不同值的静态参数
【发布时间】:2013-02-01 12:19:22
【问题描述】:

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

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

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

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

【问题讨论】:

  • 不行,你需要在每个类中重写一个getter方法,它会返回正确的值

标签: java parameters static subclass


【解决方案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);
   }
}

【讨论】:

    【解决方案2】:

    不,但使用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;
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多