在子类中使用super()并相应地更改“contains”方法

时间:2017-08-16 20:08:02

标签: java inheritance

import java.awt.*;
import java.awt.Rectangle;

public class Cell extends Rectangle{

    int x;
    int y;

    public Cell(int x, int y) {
        super(x,y);
    }

    public void paint(Graphics g, Boolean highlighted) {
        if (highlighted) {
            g.setColor(Color.LIGHT_GRAY);
            g.fillRect(x, y, 35, 35);
        }

        g.setColor(Color.BLACK);
        g.drawRect(x, y, 35, 35);
    }

    public boolean contains(Point target){
        if (target == null)
            return false;
        return target.x > x && target.x < x + 35 && target.y > y && target.y < y +35;
    }
}

我更改了类单元格的构造函数,并使用super()将其链接到父类矩形。但是,我曾经有过一个网格和主电源方法,但现在不再了。如何在程序运行时更改contains方法以返回网格?

1 个答案:

答案 0 :(得分:1)

Rectangle班级已有xy个字段 为什么要扩展这个类,并在子类中添加这些字段?
子类中的xy隐藏了哪一个超级类。

例如:

public Cell(int x, int y) {
    super(x,y);
}

您设置超类的xy

在这里:

public boolean contains(Point target){
    if (target == null)
        return false;
    return target.x > x && target.x < x + 35 && target.y > y && target.y < y +35;
}

xy引用等于0的子类字段,因为这些字段在构造函数中未被赋值。

删除它们并使用哪一个超类。