Java抽象类常量

标签 java

我有以下抽象类:

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);
}

关于Java抽象类常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46755510/

相关文章:

Java 和 XML 输出

java - 模式和匹配器 : How to -- concatenate a pattern and a string for file search

java - Java数组如何实现Cloneable?

java - 如何避免在服务类中重复 DAO 方法? @Transactional 注释 DAO 和服务类 - 这是可以接受的做法吗?

java - Eclipse 可序列化成员验证

java - @EJB 使程序崩溃

java - ActionCable(Rails5) 和安卓客户端

java - 如何在不使用线程的情况下更新 fragment 中的进度条

java - 如何使用 JAVA 从 Internet 下载 zip 文件并将其保存在特定文件夹中?

java - Java移位运算符的查询