我在我的 java 代码中遇到了设计问题。我的应用程序使用导弹,并且有不同类型的导弹,除了具有 3 个独特属性外,它们的工作原理相同。导弹的构造者必须知道这些属性。我决定让导弹成为一个抽象类,但我不能为方法/构造函数之外的子类中的受保护变量赋值。我也不能在构造函数中声明变量,因为我必须首先调用超级构造函数。我怎样才能聪明地解决这个问题?
public abstract class Missile {
private int x, y;
private Image image;
boolean visible;
private final int BOARD_WIDTH = 390;
protected final int MISSILE_SPEED;
protected final int MISSILE_HEIGHT;
protected String file;
public Missile(int x, int y) {
ImageIcon ii =
new ImageIcon(this.getClass().getResource(file));
image = ii.getImage();
visible = true;
this.x = x;
this.y = y - Math.floor(MISSILE_HEIGHT/2);
}
public Image getImage() {
return image;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public boolean isVisible() {
return visible;
}
public void move() {
x += MISSILE_SPEED;
if (x > BOARD_WIDTH)
visible = false;
}
}
并且有一个子类的理想实现,除了它不起作用。(它无法识别受保护的变量)。我该怎么办?
public class Laser extends Missile {
MISSILE_SPEED = 2;
MISSILE_HEIGHT = 5;
file = "laser.jpg";
public Laser(int x, int y) {
super(x, y);
}
}