所以我必须编写一个继承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
我的代码出了什么问题?
答案 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代码的副本,因此我无法确切地告诉您超级调用应该是什么样子,但我确信您可以解决这个问题。