2

假设我有一个像这样相当简单的 A 类 -

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

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

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

有没有“好”的方法来做到这一点?

4

3 回答 3

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...
}
于 2012-06-17T03:08:04.133 回答
0

您不需要子类,而是实例。

于 2012-06-17T03:09:56.533 回答
0

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

例子:

       Animal <--  Carnivores <-- Dog

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

最好为 A 类提供一个具有 2 个参数的构造函数

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;
  }
}
于 2012-06-17T03:14:19.743 回答