interface CanDraw{ void draw(){}; } class Shape { public void fillColor() { System.out.println(this.getClass().getSimpleName() +" is filled with "+this.getFillColor()+"."); } static String getFillColor(); } public class Canvas { private int penwidth; private String pencolor; private Object curObject; private int drewObjectCount; class Circle extends Shape implements CanDraw{ public String getFillColor() { return pencolor; } public void draw() { System.out.println("A "+pencolor+" Circle"+drewObjectCount++ +" is drew by linewidth "+penwidth+"."); } } class Triangle extends Shape implements CanDraw{ public String getFillColor() { return pencolor; } public void draw() { System.out.println("A "+pencolor+" Triangle"+drewObjectCount++ +" is drew by linewidth "+penwidth+"."); } } class Line implements CanDraw{ public void draw() { System.out.println("A "+pencolor+" Line"+drewObjectCount++ +" is drew by linewidth "+penwidth+"."); } } public void Canvas() { penwidth=1; pencolor="Black"; curObject=new Line(); drewObjectCount=1; } public void setPen(int lineWidth,String color) { penwidth=lineWidth; pencolor=color; } public void setCurrentObject(CanDraw obj) { curObject=obj; } public void draw() { curObject.draw(); } public void fillShapeColor() { curObject.fillColor(); } public static void main(String[] args) { Canvas c=new Canvas(); c.draw(); c.fillShapeColor(); c.setPen(4, "Red"); c.setCurrentObject(new Circle()); c.draw(); c.fillShapeColor(); c.setPen(2, "Blue"); c.setCurrentObject(new Triangle()); c.draw(); c.fillShapeColor(); } } 修改这段代码,使输出结果如下所示: A Black Line1 is drew by linewidth 1. A Red Circle2 is drew by linewidth 4. Circle is filled with Red. A Blue Triangle3 is drew by linewidth 2. Triangle is filled with Blue.
时间: 2024-04-04 12:30:17 浏览: 75
js-best-practices:ES6 中的代码重用
这段代码存在多处错误,需要进行如下修改:
1. 将构造函数 `Canvas()` 改为普通方法 `public void Canvas()`,否则它不会被调用。
2. 在 `Shape` 类中添加一个抽象方法 `public abstract String getFillColor();`,因为不同的形状可能有不同的填充颜色。
3. 在 `Circle` 和 `Triangle` 类中实现 `getFillColor()` 方法,返回当前画笔颜色。
4. 在 `Shape` 类中的 `fillColor()` 方法中调用 `getFillColor()` 方法,获取填充颜色。
5. 修改 `Line` 类,使其继承自 `Shape` 类并实现 `CanDraw` 接口,因为它也需要填充颜色。
6. 在 `Canvas` 类中添加一个 `Shape` 类型的变量 `curShape`,用于保存当前绘制的形状。
7. 修改 `setCurrentObject()` 方法,使其接受一个 `Shape` 类型的参数。
修改后的代码如下:
阅读全文