对于第二点可以举出更具体的实例吗
时间: 2024-09-20 20:07:03 浏览: 41
当然,当我们谈论方法重写(Overriding)时,一个常见的例子是在图形绘制程序中。假设有一个基类`Shape`,它有两个基本操作:`draw()`。然后有三个子类,如`Circle`, `Square`, 和 `Triangle`,它们都是`Shape`的实例。
```java
public abstract class Shape {
public void draw() {
System.out.println("Drawing a shape");
}
}
class Circle extends Shape {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
class Square extends Shape {
@Override
public void draw() {
System.out.println("Drawing a square");
}
}
class Triangle extends Shape {
@Override
public void draw() {
System.out.println("Drawing a triangle");
}
}
```
在这个例子中,当你有一个`Shape`类型的引用,并试图通过这个引用调用`draw()`方法,实际运行的是对应子类的实现。例如:
```java
Shape shape;
shape = new Circle(); // 圆形对象
shape.draw(); // 输出 "Drawing a circle"
shape = new Square(); // 正方形对象
shape.draw(); // 输出 "Drawing a square"
```
这就是多态如何通过方法重写提供灵活性,让同名的方法在不同的上下文中有不同的行为。
阅读全文