Java重载与重写:理解与示例
需积分: 0 72 浏览量
更新于2024-08-04
收藏 197KB DOCX 举报
"Java重载与重写的概念及应用"
在Java编程语言中,"重载"(Overloading)和"重写"(Overriding)是两个重要的多态性概念,它们都涉及到类与继承的关系,但有着不同的作用和规则。
**重载(Overloading)**
重载发生在同一个类中,指的是一个类可以有多个同名的方法,但这些方法的参数列表必须不同,包括参数的数量、类型或者顺序。返回类型并不影响方法的重载,因为调用方法时是根据方法名和传入的参数来决定调用哪个方法的。例如:
```java
public class Test {
public void print(int a) {
System.out.println("打印整数:" + a);
}
public void print(String s) {
System.out.println("打印字符串:" + s);
}
}
```
在这个例子中,`print` 方法被重载了两次,一次接受整数参数,一次接受字符串参数。在调用时,编译器会根据传递的参数类型自动选择合适的方法。
**重写(Overriding)**
重写发生在子类与父类之间,当子类继承父类后,可以对父类中已有的非私有方法(`private` 方法无法被重写)进行重新定义,以实现不同的功能。重写方法的签名(方法名、参数列表)必须与被重写的方法完全一致,但子类重写的方法不能降低访问权限,且抛出的异常不能更广泛或与父类不匹配。例如:
```java
class Animal {
public void move() {
System.out.println("动物可以移动");
}
}
class Dog extends Animal {
@Override
public void move() {
System.out.println("狗可以跑和走");
}
}
```
在这个例子中,`Dog` 类重写了 `Animal` 类的 `move` 方法。当创建 `Dog` 对象并调用 `move` 方法时,实际执行的是子类 `Dog` 的重写版本。
**运行时多态性**
在Java中,运行时多态性是通过重写实现的。虽然在编译时,编译器只能看到引用类型(如 `Animal a = new Dog()` 中的 `Animal`),但在运行时,JVM会根据实际的对象类型(`Dog`)来调用相应的方法,这就是所谓的动态绑定。例如:
```java
Animal a = new Animal(); // Animal对象
Animal b = new Dog(); // Dog对象
a.move(); // 执行Animal类的方法
b.move(); // 执行Dog类的方法
```
即使 `b` 是 `Animal` 类型的引用,但在运行时,`b.move()` 实际上调用了 `Dog` 类的 `move` 方法,这是因为 `b` 引用的对象是 `Dog` 类的实例。
**注意事项**
1. 重写方法不能抛出比被重写方法更广泛的异常,或者声明新的检查异常。
2. 重写方法的访问权限不能低于被重写方法的访问权限。
3. `final`、`static` 和 `private` 方法不能被重写。
4. 构造方法不能被重写,但可以被重载。
5. 方法的返回类型不影响重写,但应保持一致,除非使用了 `@Override` 注解,这会要求方法签名完全匹配。
了解并熟练掌握重载和重写的概念及其应用,对于编写可扩展和灵活的Java代码至关重要。通过这两个特性,开发者可以在不改变原有代码结构的情况下,为类添加新的行为,实现面向对象设计中的开闭原则。
点击了解资源详情
点击了解资源详情
162 浏览量
2023-07-18 上传
105 浏览量
101 浏览量
2023-02-28 上传
2022-12-01 上传
2021-11-16 上传
xiaoshun007~
- 粉丝: 4105
- 资源: 3118
最新资源
- 用敏捷方法实施基于CMM的软件过程改进
- 高质量C++/C 编程指南
- Intel32位编程手册,卷三
- 2008年4月全国计算机等级考试四级软件测试工程师笔试真题(非图片版)
- Intel32位编程手册,卷二
- Pro.EJB.3.Java.Persistence.API.pdf
- Delphi7下IntraWeb应用开发详解.pdf
- PC8TBD_Student_Guide.pdf
- Intel32位编程手册 ,卷一
- C#学习手册,基础的东西,适合新手
- 粗糙集属性约减c++源代码
- 初步了解JDBC入门必看
- 人工智能论文.doc
- oracle 2日速成
- USB 2.0协议层规范分析
- java面试题经典(全面)