什么是多态,辨析Java中的静态多态与动态多态的特点
时间: 2024-12-27 17:18:07 浏览: 39
### Java 中静态多态与动态多态的特点及区别
#### 静态多态 (Static Polymorphism)
静态多态主要体现在方法重载上,这是基于编译期解析的一种特性。当多个同名的方法具有不同数量或类型的参数时,Java 编译器能够依据调用处传递的实际参数自动选择最合适的方法版本[^1]。
```java
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
}
```
上述代码展示了如何在同一类内定义两个`add()`方法,它们因接受不同类型参数而在编译期间被区分开来。这种形式的多态性完全由编译器处理,在程序运行前就已经决定了具体的执行路径[^2]。
#### 动态多态 (Dynamic Polymorphism)
相比之下,动态多态涉及到了继承关系中的方法覆盖(Override),它允许子类提供父类已有功能的新实现方式。在这种情况下,实际调用哪个版本的方法取决于对象的真实类型而非引用变量声明的类型,这一决策过程发生在运行时期间。
```java
class Animal {
void sound() {
System.out.println("Some generic animal sound");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Bark!");
}
}
public class TestPolymorphism {
public static void main(String[] args) {
Animal myPet = new Dog();
myPet.sound(); // 输出 "Bark!"
}
}
```
在这个例子中,即使`myPet`是一个`Animal`类型的引用,但由于其指向的是一个`Dog`实例,因此最终调用了`Dog`类里的`sound()`方法而不是来自`Animal`类的那个默认行为。这体现了动态绑定的核心概念——直到运行时刻才确定具体应该调用哪一个方法版本。
阅读全文
相关推荐













