如何在其中初始化 class 和形状 属性?

How to initialise a class and a shape property within it?

我正在构建地图,并在上面尝试添加节点,例如墙、摄像机、门等...现在这些都是由矩形等形状组成的,我已经完成了这个已经但是我正在尝试重新处理它,因为我的碰撞检测算法有问题,因为我可以检查形状之间的碰撞但是当我试图告诉 class 形状派生的时候它会给我带来问题从(例如,门或墙的矩形)采取什么行动。

public class Door {

    private int x, y;

    public Door(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public Door getTarget() {
        Door door = new Rectangle(x, y, 30, 20);
        return door;
    }
}

有什么方法可以使这种 class 正常工作并 return 我成为一个矩形而无需使用 getTarget() 方法?

public class Door extends Rectangle {

    public double x,y;
    public Rectangle door;

    public Door(double x, double y) {
        this.x = x;
        this.y = y;
        door = new Rectangle(x, y, 30, 20);
    }

}

Door class 中不需要 Rectangle 字段,您 Door 已经扩展了 Rectangle。说 Door 扩展了 Rectangle,这意味着 Door 是一个 Rectangle。所以如果你有这样的碰撞检查功能:

public Boolean testCollision(Rectangle first, Rectangle second) { ... }

您可以简单地将任何 Door 对象传递给此方法。

Door first = new Door()
Door second = new Door()
if (testCollision(first, second) { 
    // do stuff 
}

如果你需要在你的testCollision方法中区分不同的Rectangle类型,你可以强制转换:

if (first instanceof Door) {
    Door firstAsDoor = (Door)first;
}