广场建设计划返回错误的措施

时间:2015-01-18 02:41:47

标签: java

所以我必须编写一个继承Rectangle类的程序,该程序要求Square的中心和边长。

import java.awt.Rectangle;

public class Square extends Rectangle {
    /** Constructs a square given the center and side length
     * @param centerX
     * @param centerY
     * @param side
     */
    public Square(int centerX, int centerY, int side) {
        square = new Rectangle();
        square.setLocation(centerX - side / 2, centerY - side / 2);
        square.setSize(side, side);
    }

    /** Returns the area of the square
     * @return area
     */
    public double getArea() {
        return (square.getWidth() * square.getWidth());
    }

    private Rectangle square;
}

这是测试程序:

public class SquareTester {
    public static void main(String[] args) {
        Square square = new Square(50, 50, 100);
        System.out.println(square.toString());
        System.out.println("Area: " + square.getArea());
    }
}

虽然它应该返回:

Square[x=0,y=0,width=100,height=100]
Area: 10000.0

程序返回此代码:

Square[x=0,y=0,width=0,height=0]
Area: 10000.0

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:3)

不要给Square类赋予Rectangle字段,而是让这个类使用它自己的内部固有Rectangleness。请记住,它本身一个Rectangle,因为它继承自这个类。

换句话说,摆脱这一行/字段:

private Rectangle square;

在构造函数中,请务必调用super构造函数来帮助您。

public class Square extends Rectangle
{
    /** Constructs a square given the center and side length
    @param centerX
    @param centerY
    @param side
    */
    public Square(int centerX, int centerY, int side)
    {
        super(???);

        // .... ???
    }

请注意,我们没有您的Rectangle代码的副本,因此我无法确切地告诉您超级调用应该是什么样子,但我确信您可以解决这个问题。