(1)定义一个接口Shape,包含两个方法:String getColor()和void setColor(String c)。 (2)定义一个扩展自Shape的接口Shape2D,包含两个新方法double area()和void draw()。 (3)定义一个类Circle实现Shape2D接口。其中area计算面积,draw打印字符串表示自己是circle。 (4)定义一个类Rectangle实现Shape2D接口。其中area计算面积,draw打印字符串表示自己是rectangle。 (5)定义一个测试类ShapeTester,在main方法中创建一个Circle类型的对象,向上塑形成Shape和Shape2D类型的引用变量sc和s2c,并调用sc.setcolor和s2c.area。同样,在main方法中创建一个Rectangle类型的对象,向上塑性成Shape和Shape2D类型的引用变量sr和s2r,并调用sr.setcolor和s2r.area。 定义一个测试类ShapeTester2,在main方法中创建一个大小为10,数据类型为Shape2D的数组shape2ds。随机产生10个circle或rectangle类型的变量,向上塑形后放入数组shape2ds中。遍历shape2ds中的每一个元素,并调用draw函数。
时间: 2024-02-13 16:05:23 浏览: 20
好的,以下是实现代码:
接口 Shape:
```java
public interface Shape {
String getColor();
void setColor(String c);
}
```
接口 Shape2D:
```java
public interface Shape2D extends Shape {
double area();
void draw();
}
```
类 Circle:
```java
public class Circle implements Shape2D {
private String color;
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public String getColor() {
return color;
}
@Override
public void setColor(String c) {
color = c;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
@Override
public void draw() {
System.out.println("This is a circle.");
}
}
```
类 Rectangle:
```java
public class Rectangle implements Shape2D {
private String color;
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
public String getColor() {
return color;
}
@Override
public void setColor(String c) {
color = c;
}
@Override
public double area() {
return width * height;
}
@Override
public void draw() {
System.out.println("This is a rectangle.");
}
}
```
测试类 ShapeTester:
```java
public class ShapeTester {
public static void main(String[] args) {
Circle c = new Circle(5);
Shape sc = (Shape) c;
Shape2D s2c = (Shape2D) c;
sc.setColor("red");
System.out.println("Circle area: " + s2c.area());
Rectangle r = new Rectangle(3, 4);
Shape sr = (Shape) r;
Shape2D s2r = (Shape2D) r;
sr.setColor("blue");
System.out.println("Rectangle area: " + s2r.area());
}
}
```
测试类 ShapeTester2:
```java
import java.util.Random;
public class ShapeTester2 {
public static void main(String[] args) {
Shape2D[] shape2ds = new Shape2D[10];
Random random = new Random();
for (int i = 0; i < 10; i++) {
if (random.nextBoolean()) {
shape2ds[i] = (Shape2D) new Circle(random.nextDouble() * 10);
} else {
shape2ds[i] = (Shape2D) new Rectangle(random.nextDouble() * 10, random.nextDouble() * 10);
}
}
for (Shape2D shape2d : shape2ds) {
shape2d.draw();
}
}
}
```