测试类TestGeometricObject2设计要求如下: ■ 一个能随机生成Circle类和Triangle类对象的静态方法,该方法将随机生成的象序列化到指定的文件GeometricObjects.dat中,序列化成功返回真,否则返回假。 Boolean RandomCreateGeometricObject() ■ 将GeometricObjects.dat文件中对象全部读出,存储到GeometricObject对象数组中,然后以此数组为参数,输出数组中每个对象的基本信息、周长和面积。 ■ 类中其它方法的测试。 新增一个类Rectangle,也实现接口GeometricObject,同时修改测试类TestGeometricObject2。
时间: 2024-03-03 14:53:37 浏览: 111
Java面向对象(高级)- 抽象类与抽象方法(或abstract关键字)
好的,我理解了你的问题。根据你的要求,我给出以下设计方案:
首先,我们需要定义三个类:Circle、Triangle和Rectangle,它们都实现了接口GeometricObject,这个接口包括计算周长和面积的方法。这三个类的属性包括半径、底和高、长和宽等等。
接下来,我们需要实现一个静态方法RandomCreateGeometricObject(),用于随机生成Circle类和Triangle类对象,并将它们序列化到文件GeometricObjects.dat中。方法的返回值为boolean类型,表示序列化是否成功。
然后,我们需要实现一个方法ReadGeometricObjects(),用于读取GeometricObjects.dat文件中的对象,并将它们存储到GeometricObject对象数组中。接着,我们需要遍历这个数组,计算每个对象的周长和面积,并输出它们的基本信息、周长和面积。
最后,我们需要新增一个类Rectangle,并让它实现接口GeometricObject。同时,我们需要修改测试类TestGeometricObject2,增加对新增类Rectangle的测试。
下面是类的定义以及方法的实现:
```
import java.io.*;
import java.util.Random;
interface GeometricObject {
double getPerimeter();
double getArea();
String getInfo();
}
class Circle implements GeometricObject {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getPerimeter() {
return 2 * Math.PI * radius;
}
public double getArea() {
return Math.PI * radius * radius;
}
public String getInfo() {
return "Circle: radius = " + radius;
}
}
class Triangle implements GeometricObject {
private double base;
private double height;
public Triangle(double base, double height) {
this.base = base;
this.height = height;
}
public double getPerimeter() {
return base + height + Math.sqrt(base*base + height*height);
}
public double getArea() {
return 0.5 * base * height;
}
public String getInfo() {
return "Triangle: base = " + base + ", height = " + height;
}
}
class Rectangle implements GeometricObject {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double getPerimeter() {
return 2 * (width + height);
}
public double getArea() {
return width * height;
}
public String getInfo() {
return "Rectangle: width = " + width + ", height = " + height;
}
}
public class TestGeometricObject2 {
public static boolean RandomCreateGeometricObject() {
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("GeometricObjects.dat"));
Random random = new Random();
for (int i = 0; i < 10; i++) {
if (random.nextBoolean()) {
Circle circle = new Circle(random.nextDouble() * 10);
oos.writeObject(circle);
} else {
Triangle triangle = new Triangle(random.nextDouble() * 10, random.nextDouble() * 10);
oos.writeObject(triangle);
}
}
oos.close();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
public static void ReadGeometricObjects() {
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("GeometricObjects.dat"));
GeometricObject[] objects = new GeometricObject[10];
for (int i = 0; i < 10; i++) {
objects[i] = (GeometricObject) ois.readObject();
System.out.println(objects[i].getInfo());
System.out.println("Perimeter: " + objects[i].getPerimeter());
System.out.println("Area: " + objects[i].getArea());
}
ois.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
RandomCreateGeometricObject();
ReadGeometricObjects();
Rectangle rectangle = new Rectangle(5, 10);
System.out.println(rectangle.getInfo());
System.out.println("Perimeter: " + rectangle.getPerimeter());
System.out.println("Area: " + rectangle.getArea());
}
}
```
这个测试类的主方法中,我们首先调用RandomCreateGeometricObject()方法生成随机的Circle和Triangle对象,并将它们序列化到GeometricObjects.dat文件中。接着,我们调用ReadGeometricObjects()方法读取这个文件中的对象,并计算每个对象的周长和面积。最后,我们测试新增的Rectangle类的方法。
阅读全文