簡體   English   中英

Java抽象類常量

[英]Java abstract class constants

我有以下抽象類:

public abstract class GameObject {
protected final GameSession session;
protected final int id;
protected Point position;

public GameObject(GameSession session, Point position) {
    this.position = position;
    this.id = session.getNewId();
    this.session = session;
}

public void setPosition(Point position) {
    this.position = position;
}

public int getId() {
    return id;
}

public Point getPosition() {
    return position;
}

每個gameObject還包含常量WIDTHHEIGHT 我想為所有應該使用這些常量的游戲對象添加方法getBar() 這是一個游戲對象的例子:

public class Wall extends GameObject {
private static final Logger logger = LogManager.getLogger(Wall.class);
private static final int WIDTH = 32;
private static final int HEIGHT = 32;

public Wall(GameSession session, Point position) {
    super(session, position);
    logger.info("New Wall id={}, position={}", id, position);
}

getbar()如果它在Wall類中:

public Bar getBar() {
    return new Bar(position, position.getX() + WIDTH, position.getY() + HEIGHT);
}

我應該如何正確實現GameObject 問題是我不能只在內部初始化WIDTHHEIGHT ,因為它們在子類中是不同的。

在抽象類中定義抽象方法getBar() GameObject

public abstract Bar getBar()

然后所有擴展GameObject類都必須實現它們。 因此,例如Wall類將有方法

@Override
public Bar getBar() {
    return new Bar(position, position.getX() + WIDTH, position.getY() + HEIGHT);
}

或者,您可以在GameObject中創建構造函數,該構造函數也將采用這些常量,然后您可以進行單個方法調用(無需覆蓋它):

public abstract class GameObject {
    protected final GameSession session;
    protected final int id;
    protected Point position;
    protected final width;
    protected final height;

public GameObject(GameSession session, Point position, int width, int height) {
    this.position = position;
    this.id = session.getNewId();
    this.session = session;
    this.width = width;
    this.height = height;
}

    public Bar getBar() {
        return new Bar(position, position.getX() + width, position.getY() + height);
    }
}

然后在你的Wall課上

public Wall(GameSession session, Point position) {
    super(session, position, 32, 32); //Added WIDTH and HEIGHT
    logger.info("New Wall id={}, position={}", id, position);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM