示例解析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
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
浅谈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
![](https://img.aspxhome.com/file/2023/9/64019_0s.png)
Mybatis-Plus自动填充更新操作相关字段的实现
2023-06-04 22:37:12
JAVA熔断和降级真实关系的图文详解
2023-11-30 12:39:20
![](https://img.aspxhome.com/file/2023/7/67957_0s.png)
java构造函数示例(构造方法)
2022-05-08 19:06:03
C#实现简单的JSON序列化功能代码实例
2023-06-21 09:03:52
Java C++ 算法题解leetcode669修剪二叉搜索树示例
2022-09-22 04:56:13
![](https://img.aspxhome.com/file/2023/9/61119_0s.png)
Android控件之SlidingDrawer(滑动式抽屉)详解与实例分享
2023-07-27 09:26:18
![](https://img.aspxhome.com/file/2023/2/85982_0s.jpg)
解决CollectionUtils.isNotEmpty()不存在的问题
2021-11-15 12:03:17
SpringBoot、mybatis返回树结构的数据实现
2022-05-12 18:56:08
![](https://img.aspxhome.com/file/2023/5/77365_0s.png)
SpringMVC Restful api接口实现的代码
2023-11-29 12:34:27
![](https://img.aspxhome.com/file/2023/8/60528_0s.jpg)
java基础的详细了解第四天
2022-11-25 07:24:51
![](https://img.aspxhome.com/file/2023/0/65350_0s.jpg)
Android开发之自定义加载动画详解
2023-07-27 01:41:05
![](https://img.aspxhome.com/file/2023/0/85980_0s.png)
Java结构性设计模式中的装饰器模式介绍使用
2022-04-08 06:30:00
线程局部变量的实现 ThreadLocal使用及场景介绍
2023-11-10 03:19:26
![](https://img.aspxhome.com/file/2023/1/59031_0s.jpg)
C# 根据字符串生成二维码的实例代码
2023-09-16 09:06:50
![](https://img.aspxhome.com/file/2023/4/79084_0s.png)
java模拟实现双向链表
2022-06-05 09:16:16
![](https://img.aspxhome.com/file/2023/2/62072_0s.jpg)