制作由其继承的子 class 组成的超级 class 是不好的做法吗?

Is it bad practice to make a super class composed of its inherited subclass?

我有 2 个 classes,一个玩家和一个武器。两者都有一个 hp 实例(代表武器的耐用性)和一个“名称”实例。因此,如果我想访问武器的 hp,我不必在武器 class 中重新创建 getHp 方法,因为它已经在玩家 class 中。那就是继承。 但是,我也希望玩家构造函数中有武器。这就是 subclass 的组成。问题是,武器 class 必须继承玩家构造函数中的武器对象,所以我只在 super().

中输入 null
public class Player {

    private int hp;
    private String name;
    private int speed;

    
    private ArrayList<Weapon> wList;  //There is a list of weapons in the player class
   



    public Player(int h, Weapon w, String n, int s) {

        hp = h;
        name = n;
        currentW=w;
        speed=s;


        wList = new ArrayList<>();
       public int getHp() {
        return hp;
    }

    public String getName() {
        return name;
    }

    }
public class Weapon extends Player {
    private int damage;
   

    public Weapon(int h, String n, int damage) {
        super(h, null,n, 0)
        this.damage = damage;
      

    }

如果这是不好的做法,是否有另一种方法可以在播放器构造函数中拥有武器,而不必重新编写 getter 方法?

是的,这是一种不好的做法。这样的架构将导致很难遵循代码。您需要做的是创建一个摘要 class 并将一些信息移至其中,并让您的武器和玩家 class 扩展它。

public abstract class AbstractHealthObject {
   private String name;
   private int hp;

   public AbstractHealthObject(String name, int hp) {
     setName(name);
     setHp(hp);
   }
   //add getters and setters
}

public class Player extends AbstractHealthObject {
   //instance variables
   public Player(int h, Weapon w, String n, int s) {
     super(h, n);
     //set instance variables
   }
}

public class Weapon extends AbstractHealthObject {
   public Weapon(String name, int hp, int damage) {
     super(name, hp);
     //set instance variables
   }
}