java学习笔记
java的重载和重写实例
本 文 目 录
在Java编程语言中,重载(Overloading)和重写(Overriding)是两个核心概念,它们允许开发者以不同的方式实现多态性。多态性是面向对象编程的一个重要特性,它允许我们通过父类的引用来调用子类的方法,从而提高代码的灵活性和可扩展性。
定义与目的
重载是指在同一个类中定义多个同名的方法,但它们的参数列表(参数的类型和数量)必须不同。重载的目的是允许同一个行为通过不同的参数来实现,从而使得方法更加灵活。
重写则是指在子类中提供一个与父类中具有相同名称和参数列表的方法,从而实现对父类方法的替换。重写的目的是允许子类改变从父类继承来的方法的行为。
条件与区别
重载和重写都涉及到方法的名称和参数,但它们之间存在一些关键的区别:
- 作用范围:重载是编译时多态,发生在同一个类中;重写是运行时多态,发生在继承关系中。
- 参数列表:重载要求方法必须有不同的参数列表,而重写则要求子类方法必须与父类方法有相同的参数列表。
- 返回类型:重载的方法可以有不同的返回类型,而重写的方法返回类型必须与被重写的方法一致。
- 访问修饰符:重载不限制方法的访问修饰符,而重写时子类方法的访问级别不能比父类方法的访问级别更严格。
核心类与方法
在Java中,任何类都可以通过重载和重写来实现多态性。例如,Object
类是Java中所有类的根类,它包含了可以被重写的方法,如toString()
、equals()
和hashCode()
。
使用场景
重载通常用于提供一组行为相似但参数不同的方法。例如,一个计算几何形状面积的方法,可以针对不同的形状重载。
重写则用于扩展或修改继承自父类的方法。例如,一个动物类有一个makeSound()
方法,不同的动物子类可以重写这个方法来发出特定的声音。
代码案例
重载案例
public class Calculator {
// 加法重载
public int add(int a, int b) {
return a + b;
}
// 重载 - 加法,三个整数参数
public int add(int a, int b, int c) {
return a + b + c;
}
// 重载 - 加法,两个双精度浮点数参数
public double add(double a, double b) {
return a + b;
}
}
重写案例
class Animal {
public void makeSound() {
System.out.println("Some generic sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woof woof");
}
}
// 使用场景
Animal myDog = new Dog();
myDog.makeSound(); // 输出: Woof woof
表格补充
以下是重载和重写的关键差异的对比表格:
特性 | 重载 (Overloading) | 重写 (Overriding) |
---|---|---|
定义 | 同一类中同名方法,不同参数列表 | 子类中同名同参数列表的方法替换父类方法 |
发生时间 | 编译时 | 运行时 |
参数列表 | 必须不同 | 必须相同 |
返回类型 | 可以不同 | 必须相同 |
访问修饰符 | 不限制 | 不能比父类方法更严格 |
通过上述的讲解和代码案例,我们可以看到重载和重写在Java编程中的重要性和应用方式。它们使得方法的使用更加灵活,并且允许子类以特定的方式实现或改变父类的行为。
- 上一篇
java接口自动化测试
作为一名软件测试工程师,我深知在软件开发生命周期中,接口自动化测试的重要性。它不仅能提高测试效率,还能减少人工测试的疏漏,确保接口的稳定性和可靠性。接口测试主要关注系统组件间的交互,验证数据交换的正确性。与UI自动化测试相比,接口测试更直接、更高效,因为它直接作用于数据交换层面,避免了UI层的干扰。
- 下一篇
Java读写锁 如何找到拥有写锁的线程
在多线程环境中,资源的并发访问常常成为性能和安全性的关键。Java提供了多种锁机制来解决这一问题,其中读写锁(ReentrantReadWriteLock)因其独特的特性而备受关注。读写锁允许多个读操作同时进行,但写操作是排他的,这种设计非常适合读多写少的场景。