3 回答
TA贡献1796条经验 获得超4个赞
在设计方面,我觉得构造函数 Rectance( double width ) 对于矩形来说是不自然的,会删除它。Square 的构造函数应如下所示:
public Square(double side) {
super(side,side); // width == height
this.shapeName = "Square";
}
为了进一步阐明继承,您还可以this.shapeName= "Rectangle";使用from的构造函数替换this.shapeName= getClass().getSimpleName();并删除该行。this.shapeName = "Square";Square
TA贡献1868条经验 获得超4个赞
您必须显式调用super继承类中的构造函数。如果你想考虑@runec 的回答(是的,我赞成它,因为它很好),你可能想删除只有一个参数的构造函数,Rectangle并使Square句柄成为一个有 4 个等边的矩形。
public class Rectangle extends Shape {
protected double width;
protected double height;
public Rectangle(double width, double height) {
this.shapeName = "Rectangle";
this.width = width;
this.height = height;
}
public double getArea() {
return width * height;
}
public double getPerimeter() {
return 2 * (width + height);
}
}
这里你有Square只需要一个double参数的 :
public class Square extends Rectangle {
public Square(double side) {
super(side, side);
this.shapeName = "Square";
this.width = this.height = side;
}
}
这个答案只是为了展示完整的代码,完整的想法来自@runec。
添加回答
举报