shape.draw(shape.getClass().getSimpleName()中需要的是string而不是int如何解决
时间: 2024-10-21 09:14:20 浏览: 14
详解java中this.getClass()和super.getClass()的实例
在`shape.draw(shape.getClass().getSimpleName())`这一行,`getClass().getSimpleName()`返回的是当前对象所属类的简单名称作为字符串,用于标识绘制的具体形状。由于我们期望的是字符串形式的边长而非整数,这里不需要更改。如果需要显示边长信息,可以在`Shape`接口的`draw`方法中添加额外的逻辑,例如:
```java
@Override
public void draw(String identifier) {
if (this instanceof Circle) {
System.out.println("Drawing a circle with size " + identifier);
} else if (this instanceof Rectangle) {
System.out.println("Drawing a rectangle with dimensions " + identifier);
} else if (this instanceof Triangle) {
System.out.println("Drawing a triangle with side " + identifier);
} else {
// 未识别的形状类型
System.out.println("Drawing an unknown shape with identifier: " + identifier);
}
}
```
现在在创建`shapes`数组时,传入的是形状的名字(如"1", "Circle", "2", "Rectangle",等),而非边长。例如:
```java
shapes[0] = new Circle("1");
shapes[1] = new Rectangle("Circle"); // 为了匹配接口名称,这里写全名
...
```
然后在`refresh`方法中调用`draw`:
```java
for (Shape shape : shapes) {
shape.draw(shape.getClass().getSimpleName()); // 这里不变
}
```
这样就可以根据字符串标识来区分并显示不同的形状及其对应的边长信息了。
阅读全文