上面的结果不好说明,下面再看一个例子:
时间: 2024-10-27 15:09:15 浏览: 8
当然可以,下面通过一个简单的例子来进一步解释多态的概念。假设我们有一个基础形状类`Shape`,它有两个派生类,一个是`Circle`,另一个是`Rectangle`。每个派生类都实现了`draw()`方法,但具体的实现不同:
```java
// 基础形状类
abstract class Shape {
abstract void draw();
}
// 圆形类
class Circle extends Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
// 矩形类
class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
```
现在,如果你有一个`Shape`类型的数组,并试图遍历这个数组调用`draw()`方法,你会得到不同的结果,尽管你使用的只是`Shape`类型的引用:
```java
Shape[] shapes = {new Circle(), new Rectangle()};
for (Shape shape : shapes) {
shape.draw(); // 输出 "绘制圆形" 或者 "绘制矩形"
}
```
这里,`shape.draw()`的实际行为取决于数组中的具体对象,这就是多态——同一种操作(draw)在不同类型的对象上产生了不同的效果。
阅读全文