//设计Shape的子类,Rectangle(矩形),重写父类的toString和equals方法
时间: 2023-11-11 11:09:31 浏览: 127
设计一个矩形类Rectangle(Java)
下面是一个可能的实现方式:
```java
public class Shape {
private double area;
private double perimeter;
public double getArea() {
return area;
}
public void setArea(double area) {
this.area = area;
}
public double getPerimeter() {
return perimeter;
}
public void setPerimeter(double perimeter) {
this.perimeter = perimeter;
}
@Override
public String toString() {
return "Shape{" +
"area=" + area +
", perimeter=" + perimeter +
'}';
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Shape shape = (Shape) obj;
return Double.compare(shape.area, area) == 0 &&
Double.compare(shape.perimeter, perimeter) == 0;
}
}
public class Rectangle extends Shape {
private double length;
private double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
// 计算矩形的面积和周长
setArea(length * width);
setPerimeter(2 * (length + width));
}
@Override
public String toString() {
return "Rectangle{" +
"length=" + length +
", width=" + width +
", area=" + getArea() +
", perimeter=" + getPerimeter() +
'}';
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
if (!super.equals(obj)) {
return false;
}
Rectangle rectangle = (Rectangle) obj;
return Double.compare(rectangle.length, length) == 0 &&
Double.compare(rectangle.width, width) == 0;
}
}
```
在上面的代码中,`Shape` 是一个抽象类,定义了基本的形状属性和方法。`Rectangle` 是 `Shape` 的子类,添加了矩形特有的属性和方法,并重写了父类的 `toString` 和 `equals` 方法。
在 `Rectangle` 类中,我们通过调用 `setArea` 和 `setPerimeter` 方法计算矩形的面积和周长,并在 `toString` 方法中输出这些信息。在 `equals` 方法中,我们首先调用父类的 `equals` 方法,然后再比较矩形的长度和宽度是否相等。注意,我们没有直接比较面积和周长,而是在父类中定义了这两个属性,并在子类中通过调用 `getArea` 和 `getPerimeter` 方法来获取它们的值。这是因为面积和周长是由长度和宽度决定的,而不是由 `equals` 方法决定的,所以我们应该将它们作为对象的属性来处理。
阅读全文