示例解析java重载Overloading与覆盖Overriding

作者:移动安全星球 时间:2021-11-03 17:22:19 

在 Java 中,方法的重载(Overloading)和覆盖(Overriding)是两个重要的概念。它们都涉及到方法的定义与使用,但作用和规则有所不同。

重载(Overloading)

重载是指在同一个类中定义多个同名的方法,但它们的参数列表不同(参数的个数、类型或顺序不同)。重载允许我们使用相同的方法名来实现不同的功能,提高了代码的可读性和可维护性。

下面是一个重载的例子:

public class Calculator {
   public int add(int a, int b) {
       return a + b;
   }
   public double add(double a, double b) {
       return a + b;
   }
   public int add(int a, int b, int c) {
       return a + b + c;
   }
}

在这个例子中,Calculator 类有三个 add 方法,分别接受不同数量和类型的参数。当我们调用 add 方法时,Java 会根据传入参数的类型和数量自动选择正确的方法。

Calculator calculator = new Calculator();
int result1 = calculator.add(1, 2); // 调用第一个 add 方法,输出 3
double result2 = calculator.add(1.0, 2.0); // 调用第二个 add 方法,输出 3.0
int result3 = calculator.add(1, 2, 3); // 调用第三个 add 方法,输出 6

覆盖(Overriding)

覆盖是指子类重新定义父类的方法,以实现自己的功能。当子类覆盖父类的方法时,方法名、参数列表和返回类型必须与父类完全相同。覆盖允许我们在不修改父类的基础上,定制子类的行为。

下面是一个覆盖的例子:

public class Animal {
   public void makeSound() {
       System.out.println("The animal makes a sound");
   }
}
public class Dog extends Animal {
   @Override
   public void makeSound() {
       System.out.println("The dog barks");
   }
}
public class Cat extends Animal {
   @Override
   public void makeSound() {
       System.out.println("The cat meows");
   }
}

在这个例子中,Dog 和 Cat 类都继承了 Animal 类,并分别覆盖了 makeSound 方法。当我们调用 makeSound 方法时,Java 会根据对象的实际类型选择正确的方法。

Animal myAnimal = new Animal();
myAnimal.makeSound(); // 输出 "The animal makes a sound"
Animal myDog = new Dog();
myDog.makeSound(); // 输出 "The dog barks"
Animal myCat = new Cat();
myCat.makeSound(); // 输出 "The cat meows"

注意,当子类覆盖父类的方法时,可以使用 @Override 注解来显式声明。这样,如果我们不小心修改了方法签名或者拼写错误,编译器会报错,帮助我们捕获潜在的错误。

总结一下,重载和覆盖是 Java 中两个重要的概念。重载允许我们在同一个类中定义多个同名但参数列表不同的方法,实现不同的功能。覆盖允许子类重新定义父类的方法,定制自己的行为。理解这些概念并在实际编程中应用它们,可以帮助我们编写更高效、易读的代码。

来源:https://segmentfault.com/a/1190000043842594

标签:java,重载,覆盖,Overloading,Overriding
0
投稿

猜你喜欢

  • 浅谈spring中scope作用域

    2022-08-18 10:42:53
  • 以武侠形式理解Java LinkedList源码

    2021-12-27 20:34:23
  • Java为什么基本数据类型不需要进行创建对象?

    2022-03-16 08:59:03
  • 自己写的java日志类和方法代码分享

    2021-08-18 19:34:13
  • SpringBoot加密配置文件的SQL账号密码方式

    2023-08-23 08:59:42
  • Mybatis-Plus自动填充更新操作相关字段的实现

    2023-06-04 22:37:12
  • JAVA熔断和降级真实关系的图文详解

    2023-11-30 12:39:20
  • java构造函数示例(构造方法)

    2022-05-08 19:06:03
  • C#实现简单的JSON序列化功能代码实例

    2023-06-21 09:03:52
  • Java C++ 算法题解leetcode669修剪二叉搜索树示例

    2022-09-22 04:56:13
  • Android控件之SlidingDrawer(滑动式抽屉)详解与实例分享

    2023-07-27 09:26:18
  • 解决CollectionUtils.isNotEmpty()不存在的问题

    2021-11-15 12:03:17
  • SpringBoot、mybatis返回树结构的数据实现

    2022-05-12 18:56:08
  • SpringMVC Restful api接口实现的代码

    2023-11-29 12:34:27
  • java基础的详细了解第四天

    2022-11-25 07:24:51
  • Android开发之自定义加载动画详解

    2023-07-27 01:41:05
  • Java结构性设计模式中的装饰器模式介绍使用

    2022-04-08 06:30:00
  • 线程局部变量的实现 ThreadLocal使用及场景介绍

    2023-11-10 03:19:26
  • C# 根据字符串生成二维码的实例代码

    2023-09-16 09:06:50
  • java模拟实现双向链表

    2022-06-05 09:16:16
  • asp之家 软件编程 m.aspxhome.com