什么是多态,辨析 java 中的静态多态与动态多态的特点。
时间: 2024-12-27 20:18:07 浏览: 50
### Java 中静态多态与动态多态的特点及区别
#### 静态多态 (Static Polymorphism)
静态多态主要体现在方法重载上,这是在编译期间解析的方法调用形式。当存在多个同名但参数列表不同的方法时,编译器依据传递给方法的具体参数类型和数量来决定调用哪一个版本的方法[^2]。
```java
class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
```
上述代码展示了如何利用不同类型的参数定义两个`add()`方法。这种情况下,编译器会在编译阶段就确定应该调用哪个具体的`add()`方法实例[^3]。
#### 动态多态 (Dynamic Polymorphism)
相比之下,动态多态涉及到了继承关系中的方法覆盖(Override),它允许子类提供父类已有功能的新实现方式。在这种场景下,对象的实际行为取决于其运行时刻的真实类型而非声明类型。这意味着即使变量被声明为某个基类类型,但如果指向的是派生类的对象,则会调用该派生类中覆写后的版本[^4]。
```java
class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("Dog barks");
}
}
public class TestPolymorphism {
public static void main(String[] args){
Animal myPet = new Dog(); // 实际类型是Dog
myPet.sound(); // 输出 "Dog barks"
}
}
```
在这个例子中,尽管`myPet`被声明成`Animal`类型,但由于创建了一个`Dog`实例并赋给了这个引用,因此实际上调用了`Dog`类里的`sound()`方法而不是`Animal`类中原有的那个方法[^1]。
阅读全文
相关推荐




