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

Java函数的重载和覆盖:什么是函数重载?什么是函数覆盖?

发布时间:2023-06-06 09:24:36

Java语言中,函数是一组完成特定任务的语句集合。Java函数有两个基本概念:重载和覆盖。函数重载是指在同一个类中定义多个相同名称但参数不同的函数,而函数覆盖是指子类重新定义父类中已经定义的函数。这两个概念在Java 中经常使用,理解它们的区别和用法是学习Java的基础之一。

函数重载(Function Overloading)

函数是面向对象编程中的重要组成部分之一。不同的函数名称可以方便地区分不同的操作,但函数名称可能会难以记忆,尤其是在存在许多的函数和操作的时候。为解决这个问题,Java提供了函数重载。

函数重载是指在同一个类中定义多个相同的函数名称,但是每个函数的参数类型、数量或顺序不同,这样在调用函数时就可以根据传递的参数类型进行选择,并且在执行不同的操作。

函数的重载使代码更加易于理解和维护,同时减少了函数的命名冲突的问题。例如,我们可以在同一个类中定义不同的函数来完成相同的操作。

函数重载的语法形式:在同一个类中可以定义一个或多个相同名称但参数列表不同的函数,如下所示:

类型 名称 (参数列表1){ ... }

类型 名称 (参数列表2){ ... }

.

.

类型 名称 (参数列表n){ ... }

函数重载的示例代码:

public class OverloadTest {

   public void area(int x) {

      System.out.println("The area of the square is " + x*x);

   }

   public void area(int x, int y) {

      System.out.println("The area of the rectangle is " + x*y);

   }

   public void area(double r) {

      System.out.println("The area of the circle is " + 3.14*r*r);

   }

   public static void main(String args[]) {

      OverloadTest obj = new OverloadTest();

      obj.area(10);

      obj.area(10, 20);

      obj.area(5.5);

   }

}

输出结果为:

The area of the square is 100

The area of the rectangle is 200

The area of the circle is 94.985

在示例代码中,area () 函数被重载使用三个不同的类型:int,int和double。每个方法计算不同形状的区域。在调用函数area ()时,根据传递的参数类型自动调用相应的方法。

函数覆盖(Function Overriding)

在面向对象编程中,子类可以覆盖继承自父类的方法,以自定义子类对该方法的实现。这样,当调用该方法时,将执行子类中的方法,而不是父类中的方法。这个过程称为方法覆盖。方法覆盖要求子类的方法名称,参数类型,参数数量和返回值类型与父类的方法完全相同。

函数覆盖有助于子类在不改变父类行为的同时,自定义行为。这可以提高代码的可维护性和扩展性,并允许子类在不修改父类的情况下增加新行为。

覆盖函数的语法形式:子类中的方法名称,参数类型,参数数量和返回类型必须与父类中的方法完全相同:

类型 名称 (参数列表){ ... }

函数覆盖示例代码:

class A{

   public void display() {

      System.out.println("A.display");

   }

}

class B extends A {

   public void display() {

      System.out.println("B.display");

   }

}

public class Test {

   public static void main(String args[]) {

      A obj = new A();

      obj.display();

      B obj2 = new B();

      obj2.display();

   }

}

输出结果:

A.display

B.display

在示例代码中,类A中的display()方法被类B中的display()方法覆盖。当创建类B的对象并调用其display()方法时,Java运行时将执行类B中的方法,而不是类A中的方法。

总结

Java提供了函数重载和函数覆盖来提高代码的可维护性和扩展性。函数重载允许同一个类中包含多个名称相同但参数不同的函数,函数覆盖允许子类重写其父类中的函数。重载和覆盖是Java中的两个重要概念,可以使代码更加灵活,降低开发成本,提高代码的可读性和可维护性。