什么是多态,辨析Java中的静态你多态与动态多态的特点
时间: 2024-12-26 12:15:59 浏览: 4
### Java 中静态多态与动态多态
#### 静态多态 (编译时多态)
方法重载是实现静态多态的主要方式之一。当多个同名函数具有不同参数列表(数量、类型或顺序),则这些函数构成重载关系。编译器依据调用处的具体参数来决定应执行哪个版本的方法,这一过程发生在编译阶段。
```java
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
}
```
上述代码展示了两个`add`方法的不同签名[^1]。
#### 动态多态 (运行时多态)
动态多态通过子类覆盖父类中的方法得以体现,即方法重写。即使对象的实际类型是在程序运行期间才确定下来,虚拟机仍能正确调用相应类型的特定方法版本。这种机制允许基类引用指向其任意派生类的对象,并能够透明地访问被重新定义的行为。
```java
class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Dog barks");
}
}
```
在此例子中,如果创建了一个 `Animal` 类型的变量并将其赋值给 `Dog` 的实例,在调用 `sound()` 方法时会打印出 "Dog barks" 而不是默认行为。
#### 特点对比
| 属性 | 静态多态 | 动态多态 |
| --- | --- | --- |
| **发生时间** | 编译期解析 | 运行时期解析 |
| **涉及概念** | 方法重载 | 方法重写 |
| **性能开销** | 较低 | 略高 |
#### 方法重载与重写的差异
- **重载**:在同一类内可以有多个相同名称但形参不同的方法;它们之间相互独立,互不影响。
- **重写**:存在于父子类之间的关联上,子类提供与父类功能相似却有所改进的新实现;两者保持相同的声明头以便替换原有逻辑[^2]。
阅读全文