【问题标题】:Is Method Overloading and Method Overriding both dynamic Polymorphism?方法重载和方法重写都是动态多态吗?
【发布时间】: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


    【解决方案1】:

    方法覆盖是动态的,因为调用哪个方法的决定发生在运行时。方法重载是静态的,因为在编译类型时根据参数的数量和类型做出决定。/

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 2010-11-14
      • 2020-05-21
      • 2011-06-25
      • 2011-06-22
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      相关资源
      最近更新 更多