给出详细注释// Shape类 public class Shape { public void draw() { System.out.println("正在绘制形状"); } } // Circle类 public class Circle extends Shape { @Override public void draw() { System.out.println("正在绘制圆形"); } } // Rectangle类 public class Rectangle extends Shape { @Override public void draw() { System.out.println("正在绘制矩形"); } } // 测试程序 public class Test { public static void main(String[] args) { Shape shape1 = new Shape(); Shape shape2 = new Circle(); Shape shape3 = new Rectangle(); shape1.draw(); shape2.draw(); shape3.draw(); } }
时间: 2024-02-07 16:02:27 浏览: 29
这段代码涉及到了继承和多态的概念。
首先定义了一个 Shape 类,其中有一个 draw() 方法,输出 "正在绘制形状" 的信息。
然后定义了 Circle 类和 Rectangle 类,它们都继承自 Shape 类,并重写了 draw() 方法。Circle 类的 draw() 方法输出 "正在绘制圆形" 的信息,Rectangle 类的 draw() 方法输出 "正在绘制矩形" 的信息。
最后在 Test 类中创建了三个 Shape 类型的对象:shape1、shape2 和 shape3。其中 shape1 是 Shape 类的对象,shape2 和 shape3 分别是 Circle 类和 Rectangle 类的对象。
在输出结果时,分别调用了这三个对象的 draw() 方法,由于 shape1 是 Shape 类的对象,因此输出的是 "正在绘制形状" 的信息;shape2 和 shape3 分别是 Circle 类和 Rectangle 类的对象,由于它们都重写了 draw() 方法,因此输出的是各自对应的信息。这就是多态的体现,同样的方法调用,根据对象的不同,会有不同的实现方式。
相关问题
使用Java定义Shape接口实现多态。 interface Shape{ void draw(); void erase(); } Circle类、Square类、Triangle类实现Shape,编写程序NewShapes.java,利用Random类实现随机9次调用不同图形类绘图。Circle类的定义示例: class Circle implements Shape{ public void draw(){ System.out.println("Calling Circle.draw()"); } public void erase(){ System.out.println("Calling Circle.erase ()"); } }
下面是实现题目要求的Java代码:
```
import java.util.Random;
interface Shape {
void draw();
void erase();
}
class Circle implements Shape {
public void draw() {
System.out.println("Calling Circle.draw()");
}
public void erase() {
System.out.println("Calling Circle.erase()");
}
}
class Square implements Shape {
public void draw() {
System.out.println("Calling Square.draw()");
}
public void erase() {
System.out.println("Calling Square.erase()");
}
}
class Triangle implements Shape {
public void draw() {
System.out.println("Calling Triangle.draw()");
}
public void erase() {
System.out.println("Calling Triangle.erase()");
}
}
public class NewShapes {
public static void main(String[] args) {
Shape[] shapes = new Shape[9];
Random random = new Random();
for (int i = 0; i < shapes.length; i++) {
int shapeType = random.nextInt(3);
switch (shapeType) {
case 0:
shapes[i] = new Circle();
break;
case 1:
shapes[i] = new Square();
break;
case 2:
shapes[i] = new Triangle();
break;
}
}
for (Shape shape : shapes) {
shape.draw();
shape.erase();
}
}
}
```
上面的代码定义了一个 `Shape` 接口,其中包含了 `draw()` 和 `erase()` 方法。接着,`Circle`、`Square`、`Triangle` 类分别实现了 `Shape` 接口,并且实现了 `draw()` 和 `erase()` 方法。最后,`NewShapes` 类利用 `Random` 类生成随机数来创建不同的图形对象,并且调用这些图形对象的 `draw()` 和 `erase()` 方法。通过这个例子,我们可以看到多态的用法,即在运行时根据对象的实际类型来选择调用哪个方法。
public class Receiver { public void drawRectangle() { System.out.println("Draw a rectangle!"); }要求在这段代码中加入绘制三角形的代码,要求真正绘制出图形
好的,我可以帮你添加绘制三角形的代码。你可以使用Java Graphics2D库来实现这个功能。具体的代码如下所示:
```
import java.awt.*;
import javax.swing.*;
public class Receiver {
public void drawRectangle() {
JFrame frame = new JFrame("Draw Shape");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.RED);
g2d.fillRect(10, 10, 100, 100);
g2d.setColor(Color.BLUE);
int[] xPoints = {150, 200, 250};
int[] yPoints = {150, 50, 150};
Polygon triangle = new Polygon(xPoints, yPoints, 3);
g2d.fill(triangle);
}
};
panel.setPreferredSize(new Dimension(300, 300));
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
```
在这段代码中,我们创建了一个JFrame窗口,并在其中添加一个JPanel面板。在JPanel的paintComponent方法中,我们首先使用Graphics2D对象绘制了一个红色矩形,然后使用相同的Graphics2D对象绘制了一个蓝色三角形。具体的绘制过程可以参考Java Graphics2D库的API文档。
当你调用drawRectangle方法时,这段代码将会在一个窗口中绘制出一个矩形和一个三角形。