首页  >  文章  >  Java  >  Java 中方法重写和方法重载有何不同?

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

Linda Hamilton
Linda Hamilton原创
2024-10-27 20:08:30341浏览

How do Method Overriding and Method Overloading Differ in Java?

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

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

动态多态与静态多态

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

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

方法重载

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

代码示例(方法重载):

<code class="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
  }
}</code>

方法重写

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

代码示例(方法重写):

<code class="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
  }
}</code>

以上是Java 中方法重写和方法重载有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn