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

Java中函数的重载和覆盖:多态性

发布时间:2023-06-18 00:31:36

Java是一门基于面向对象编程的高级编程语言,它对多态性的支持非常好,且多态性是Java面向对象编程的基石之一。Java中函数的重载和覆盖就是多态性的两种体现方式。

1. 函数的重载

函数的重载是指在同一个类中,定义了多个同名函数,但它们的参数列表不同,即参数类型、参数个数或参数顺序有所不同。Java编译器会根据调用函数时提供的参数列表,自动匹配到相应的函数,从而实现了函数的重载。

举个例子:

public class OverloadExample {

  public int add(int a, int b) {
    return a + b;
  }

  public double add(double a, double b) {
    return a + b;
  }

  public String add(String a, String b) {
    return a + " " + b;
  }
}

其中,这三个函数都叫做add函数,但它们的参数列表不同,这就是函数的重载。

2. 函数的覆盖

函数的覆盖是指子类定义了一个与父类某个函数具有相同名称、返回类型和参数列表的函数,这个新函数会覆盖父类中原有的函数。当通过子类的实例对象调用这个函数时,会优先调用子类中的函数而不是父类中的函数,这就是函数的覆盖,也称为函数的重写。

举个例子:

public class OverrideExample {
  public static void main(String[] args) {
    Father father = new Father();
    System.out.println(father.greeting());  //输出:Hello from Father

    Son son = new Son();
    System.out.println(son.greeting());  //输出:Hello from Son
  }
}

class Father {
  public String greeting() {
    return "Hello from Father";
  }
}

class Son extends Father {
  @Override
  public String greeting() {
    return "Hello from Son";
  }
}

在这个例子中,Father类中定义了一个greeting函数,返回“Hello from Father”,Son类继承自Father类,并覆盖了greeting函数,返回“Hello from Son”。当通过Father对象调用greeting函数时,会输出“Hello from Father”。但是通过Son对象调用greeting函数时,却输出了“Hello from Son”。这就是因为greeting函数被覆盖了,父类中的函数被子类中的函数所替代。

总的来说,Java中的多态性可以通过函数的重载和覆盖这两种方式来体现。函数的重载是指在同一个类中,定义了多个同名函数,但它们的参数列表不同。函数的覆盖则是指子类定义了一个与父类某个函数具有相同名称、返回类型和参数列表的函数,这个新函数会覆盖父类中原有的函数。函数的重载和覆盖都是Java对多态性的支持方式之一。