【发布时间】:2022-12-16 10:46:34
【问题描述】:
我正在从 Dr.R.Nageswara Rao 的 Core Java An Integrated Approach 学习 JAVA。
书中提到方法重载和方法重写都是动态多态的类型。但是参考了网上的博客和网站后发现,Method Overloading是Static的,Method Overriding是Dynamic的多态。我不确定要遵循哪一个。
Explanation from the book:
方法重载
public class Sample {
void add(int a, int b){
System.out.println("Sum of Two: "+ (a+b));
}
void add(int a, int b, int c){
System.out.println("Sum of Two: "+ (a+b+c));
}
}
上面的类有两个方法。问题是谁来决定调用哪个方法?是Java编译器还是JVM?因为这些方法是使用一个对象来调用的,所以编译器在编译时无法决定用户实际调用的是哪个方法。它必须等到为 Sample 类创建对象。对象的创建由 JVM 在运行时进行。现在,JVM 应该决定用户在运行时实际调用了哪些方法。因此它的动态多态性。
方法覆盖
这里 JVM 还根据用于调用该方法的对象的数据类型(类)来决定调用哪个方法。因此,方法覆盖也是动态多态的一种。
Note: 使用静态方法、私有方法和最终方法的方法重载和方法覆盖是静态多态性的示例。
【问题讨论】:
标签: java polymorphism