”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Java 中方法重写和方法重载有何不同?

Java 中方法重写和方法重载有何不同?

发布于2024-11-21
浏览:583

How do Method Overriding and Method Overloading Differ in Java?

区分 Java 中的动态多态性和静态多态性

理解动态多态性和静态多态性之间的区别对于 Java 的面向对象编程至关重要。本文将提供一个简化的解释和示例来阐明这个概念。

动态多态与静态多态

多态允许单个方法名称具有多个实现,具体取决于调用它的对象类型。多态性有两种主要类型:

  • 动态多态性(运行时绑定): 方法调用在运行时根据实际对象的类进行解析。它发生在子类中的方法重写中,也称为后期绑定。
  • 静态多态性(编译时绑定): 方法调用根据声明的类型在编译时解析参考变量。它与同一类中的方法重载一起发生,也称为早期绑定。

方法重载

方法重载是静态多态性的一种形式,其中多个同一类中存在同名的方法,但参数不同。调用重载方法时,Java 根据传入参数的数量和类型来确定要调用的适当方法。

代码示例(方法重载):

class Calculation {
  void sum(int a, int b) { System.out.println(a   b); }
  void sum(int a, int b, int c) { System.out.println(a   b   c); }

  public static void main(String[] args) {
    Calculation obj = new Calculation();
    obj.sum(10, 10, 10); // Output: 30
    obj.sum(20, 20); // Output: 40
  }
}

方法重写

方法重写是动态多态性的一种形式,其中具有相同名称和签名的方法在不同的类中声明,但共享一个公共父类。当调用重写的方法时,Java 在运行时根据对象的实际类来确定要调用的方法。

代码示例(方法重写):

class Animal {
  public void move() {
    System.out.println("Animals can move");
  }
}

class Dog extends Animal {

  public void move() {
    System.out.println("Dogs can walk and run");
  }
}

public class TestDog {

  public static void main(String[] args) {
    Animal a = new Animal(); // Animal reference and object
    Animal b = new Dog(); // Animal reference but Dog object

    a.move(); // Output: Animals can move

    b.move(); // Output: Dogs can walk and run
  }
}
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3