欢迎访问宙启技术站
智能推送

Java函数的多态性与重载和重写有何关系?

发布时间:2023-06-15 01:48:12

Java的函数包括方法和构造函数,它们的多态性是指同一个名称的函数可以被不同的对象调用执行,表现出不同的行为。Java的多态性主要通过两种方式实现:重载(overloading)和重写(overriding)。

重载是指在一个类中定义多个方法,这些方法具有相同的名称但具有不同的参数列表。它允许方法以相同的名称但不同的输入形参调用执行,这使得Java的编程更加灵活。重载的实现多态性的方法是在编译时确定调用哪个具体的方法,即通过参数的类型和数量来确定调用的具体方法。

例如,下面代码中的两个print方法,一个接收int类型参数,另一个接收String类型参数,在调用时可以根据传入的参数类型和数量自动选择执行哪个方法。

public class Example {
   public static void print(int num) {
      System.out.println("Print integer: " + num);
   }
   public static void print(String str) {
      System.out.println("Print string: " + str);
   }
   public static void main(String[] args) {
      print(10);
      print("Hello World");
   }
}

这才是重载实现多态性的一种方式,它在编译时确定调用哪个方法。如果print方法只有一个,那么调用方法时只能传入一种类型的参数,不能同时接收int和String类型的参数。

重写是指子类重写父类中已有的方法,在子类中定义一个与父类中某方法名称相同、参数类型和个数相同、返回类型也相同的方法。这使得一个对象在不同的情况下表现出不同的行为。重写实现多态性的方法是在运行时动态确定调用哪个具体的方法,即通过指向子类对象的引用调用此方法时,会根据实际对象的类型来确定调用哪个具体的方法。

例如,下面代码中的Animal类有一个eat方法,子类Cat重写了该方法,调用eat方法时会分别执行子类和父类中的方法。

class Animal {
   public void eat() {
      System.out.println("Animal is eating");
   }
}
class Cat extends Animal {
   public void eat() {
      System.out.println("Cat is eating");
   }
}
public class Example {
   public static void main(String[] args) {
      Animal a = new Animal();
      a.eat();
      Cat c = new Cat();
      c.eat();
      Animal ac = new Cat();
      ac.eat();
   }
}

这里ac是Animal类的引用,但它指向了一个Cat对象,调用ac的eat方法时会执行Cat类中重写的eat方法,这就是运行时确定调用哪个具体方法。

综上所述,Java的多态性是通过重载和重写实现的,重载是编译时确定调用哪个具体方法,重写是运行时确定调用哪个具体方法。重载和重写都实现了多态性,但它们的实现方式有所不同:重载是同一个类中多个方法同一名称不同参数列表实现多态,而重写是不同类中子类重写父类同一方法实现多态。重载和重写是Java语言面向对象的重要特性,只有充分理解它们之间的关系,才能更好地设计和开发高质量的Java程序。