类似的子类

时间:2012-06-17 03:05:20

标签: java class inheritance

假设我有一个类似A的A级 -

public class A{
  private int randomField = 0;
  protected int key;
  protected double dmg;
}

现在我想编写一些继承受保护字段的子类,并且只根据分配给这些字段的初始值而有所不同 - 例如,如果我写了两个子类B和C,则唯一的区别是这两个子类将是值key和dmg将具有不同的值。他们将共享一个方法,set,它将完全相同,因为它会影响同一个变量。

我发现当我正在编写这些子类时,我正在重复自己,因为我只是更改构造函数以将不同的初始值设置为key和dmg,并简单地复制并粘贴set方法。

这样做有“好”的方法吗?

3 个答案:

答案 0 :(得分:4)

这不是你应该进行子类化的地方,实际上是对继承的严重过度使用。如果“子类”之间的唯一区别是对象的初始状态,那么只使用一个类,而只是在构造函数或工厂中设置状态以创建所需状态的实例。

如,

public class A{
  private int randomField = 0;
  private int key;
  private double dmg;

  public A(int key, double dmg) {
    this.key = key;
    this.dmg = dmg;
  }

  // getters and possibly setters...
}

答案 1 :(得分:0)

您不需要子类而是实例。

答案 2 :(得分:0)

这里的子类绝对没有理由简单地在构造函数中初始化不同的值,当你需要具有不同功能的相同行为时,子类很重要。

示例:

       Animal <--  Carnivores <-- Dog

动物类在这里将具有动物的重要特征,然后食肉动物类将更具体,而狗是特定的动物。

最好有一个带有2个参数的构造函数用于A类

public class A{
  private int randomField = 0;
  protected int key;
  protected double dmg;

 public A(int key, double dmg)
  {

     this.key = key;
     this.dmg = dmg;
  }
}