设计抽象类GeometricObject及其子类Triangle和Circle。 GeometricObject类设计要求如下: ■ 一个名为color 的Color类型的私有数据域,表示对象的颜色。 ■ 一个名为filled 的Boolean类型的私有数据域,表示对象是否填充颜色。 ■ 一个名为dateCreated的Date类型的私有数据域,表示对象的创建日期。 ■ 一个无参构造方法。 ■ 一个能创建特定color 和filled 的有参构造方法。 ■ 相关数据域的访问器和修改器。 ■ 两个个名为draw和erase的抽象方法。 ■ 一个名为getArea的抽象方法。 ■ 一个名为getPerimeter的抽象方法。 ■ 重写toString方法。 Triangle类设计要求如下: ■ 三个名为side1、side2和 side3的double类型的私有数据域表示三角形的三条边。它们的默认值是1.0。要求三个数据域保留2位小数。 ■ 一个无参的构造方法创建默认三角形。 ■ 一个能创建带指定side1、side2和 side3的有参构造方法。 ■ 所有三个数据域的访问器和修改器方法。 ■ 父类抽象方法的实现。 ■ 重写toString方法
时间: 2024-03-26 22:38:18 浏览: 84
定义三个类Point,Circle和Cylinder,Point类为基类,为上述3个类添加计算面积的成员函数Area(),要求函数Area()采用虚函数的形式,并通过基类指针调用虚函数Area()。
好的,根据你的要求,下面是GeometricObject抽象类和它的子类Triangle和Circle的设计:
```java
import java.awt.Color;
import java.util.Date;
public abstract class GeometricObject {
private Color color; // 对象的颜色
private boolean filled; // 是否填充颜色
private Date dateCreated; // 对象创建日期
// 无参构造方法
public GeometricObject() {
color = Color.BLACK;
filled = false;
dateCreated = new Date();
}
// 有参构造方法
public GeometricObject(Color color, boolean filled) {
this.color = color;
this.filled = filled;
dateCreated = new Date();
}
// 访问器和修改器方法
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public boolean isFilled() {
return filled;
}
public void setFilled(boolean filled) {
this.filled = filled;
}
public Date getDateCreated() {
return dateCreated;
}
// 抽象方法
public abstract void draw();
public abstract void erase();
public abstract double getArea();
public abstract double getPerimeter();
// 重写toString方法
public String toString() {
return "GeometricObject: color = " + color + ", filled = " + filled
+ ", dateCreated = " + dateCreated;
}
}
```
```java
public class Triangle extends GeometricObject {
private double side1; // 三角形的边1
private double side2; // 三角形的边2
private double side3; // 三角形的边3
// 无参构造方法
public Triangle() {
side1 = 1.0;
side2 = 1.0;
side3 = 1.0;
}
// 有参构造方法
public Triangle(double side1, double side2, double side3) {
this.side1 = Math.round(side1 * 100.0) / 100.0;
this.side2 = Math.round(side2 * 100.0) / 100.0;
this.side3 = Math.round(side3 * 100.0) / 100.0;
}
// 访问器和修改器方法
public double getSide1() {
return side1;
}
public void setSide1(double side1) {
this.side1 = Math.round(side1 * 100.0) / 100.0;
}
public double getSide2() {
return side2;
}
public void setSide2(double side2) {
this.side2 = Math.round(side2 * 100.0) / 100.0;
}
public double getSide3() {
return side3;
}
public void setSide3(double side3) {
this.side3 = Math.round(side3 * 100.0) / 100.0;
}
// 实现父类抽象方法
public void draw() {
System.out.println("Drawing triangle");
}
public void erase() {
System.out.println("Erasing triangle");
}
public double getArea() {
double p = getPerimeter() / 2;
return Math.sqrt(p * (p - side1) * (p - side2) * (p - side3));
}
public double getPerimeter() {
return side1 + side2 + side3;
}
// 重写toString方法
public String toString() {
return "Triangle: side1 = " + side1 + ", side2 = " + side2 + ", side3 = " + side3
+ ", area = " + getArea();
}
}
```
```java
public class Circle extends GeometricObject {
private double radius; // 圆的半径
public static final double PI = 3.14; // 圆周率
// 无参构造方法
public Circle() {
radius = 0.00;
}
// 有参构造方法
public Circle(double radius) {
this.radius = Math.round(radius * 100.0) / 100.0;
}
// 访问器方法
public double getRadius() {
return radius;
}
// 修改器方法
public void setRadius(double radius) {
this.radius = Math.round(radius * 100.0) / 100.0;
}
// 实现父类抽象方法
public void draw() {
System.out.println("Drawing circle");
}
public void erase() {
System.out.println("Erasing circle");
}
public double getArea() {
return PI * radius * radius;
}
public double getPerimeter() {
return 2 * PI * radius;
}
// 重写toString方法
public String toString() {
return "Circle: radius = " + radius + ", area = " + getArea();
}
}
```
这里的GeometricObject是一个抽象类,定义了颜色、是否填充、创建日期等属性,以及绘制、计算面积和周长等抽象方法。Triangle和Circle类继承自GeometricObject类,并且分别实现了它的抽象方法。其中,Triangle类有三个边长属性,而Circle类有一个半径属性,并且它们都实现了计算面积和周长的具体方法。
阅读全文