第2课_继承与多态
热度🔥:72 免费课程
授课语音
Java 中的继承和多态
继承和多态是面向对象编程(OOP)的两个核心特性。通过继承可以实现代码复用和类的扩展,通过多态可以提高代码的灵活性和可维护性。
1. 继承(Inheritance)
1.1 什么是继承?
继承是面向对象编程中的一个重要特性,它允许一个类(子类)从另一个类(父类)中获取属性和方法,从而实现代码复用和功能扩展。
关键点:
extends
关键字:用于声明子类继承父类。- 子类可以访问父类的公共(
public
)和受保护(protected
)成员。 - 子类可以重写父类的方法。
1.2 继承的代码案例
父类:动物类
// 定义一个父类:动物类
class Animal {
// 父类的属性
protected String name;
// 构造方法
public Animal(String name) {
this.name = name;
}
// 父类的方法
public void eat() {
System.out.println(name + " 正在吃东西...");
}
}
子类:狗类
// 定义一个子类:狗类,继承自 Animal 类
class Dog extends Animal {
// 子类的构造方法
public Dog(String name) {
super(name); // 调用父类构造方法
}
// 子类新增的方法
public void bark() {
System.out.println(name + " 正在汪汪叫...");
}
}
主方法:测试继承
public class InheritanceExample {
public static void main(String[] args) {
// 创建一个狗对象
Dog dog = new Dog("小黑");
// 调用父类的方法
dog.eat();
// 调用子类的方法
dog.bark();
}
}
输出示例:
小黑 正在吃东西...
小黑 正在汪汪叫...
代码解析:
- 子类
Dog
通过super
调用父类的构造方法。 - 子类不仅继承了父类的
eat
方法,还扩展了新的bark
方法。
2. 多态(Polymorphism)
2.1 什么是多态?
多态是指同一个方法在不同对象中具有不同的表现形式。多态分为以下两种:
- 编译时多态(方法重载):通过方法名相同但参数不同实现。
- 运行时多态(方法重写):通过子类重写父类方法实现。
2.2 运行时多态的特点
- 父类引用指向子类对象。
- 方法调用时,会执行子类的重写方法,而不是父类的方法。
- 多态依赖于方法的重写。
2.3 多态的代码案例
父类:动物类
// 父类:动物类
class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
// 定义一个可以被子类重写的方法
public void makeSound() {
System.out.println(name + " 发出声音...");
}
}
子类:猫类和狗类
// 子类:猫类
class Cat extends Animal {
public Cat(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println(name + " 正在喵喵叫...");
}
}
// 子类:狗类
class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println(name + " 正在汪汪叫...");
}
}
主方法:测试多态
public class PolymorphismExample {
public static void main(String[] args) {
// 创建动物数组
Animal[] animals = new Animal[2];
// 子类对象赋值给父类引用
animals[0] = new Cat("小白猫");
animals[1] = new Dog("小黑狗");
// 通过多态调用方法
for (Animal animal : animals) {
animal.makeSound(); // 调用时执行子类的重写方法
}
}
}
输出示例:
小白猫 正在喵喵叫...
小黑狗 正在汪汪叫...
代码解析:
animals
是一个Animal
类型的数组,可以存储父类和子类对象。- 调用
makeSound
方法时,具体执行的是子类重写的方法,而不是父类的方法。
3. 方法重载 vs 方法重写
特性 | 方法重载(Overloading) | 方法重写(Overriding) |
---|---|---|
定义 | 同一个类中方法名相同,但参数列表不同。 | 子类中重新定义父类的同名方法。 |
发生阶段 | 编译时 | 运行时 |
参数列表 | 必须不同 | 必须相同 |
访问修饰符 | 无限制 | 子类方法的访问权限不能小于父类方法。 |
关键字 | 不需要 | 需添加 @Override 注解(推荐)。 |
4. 继承和多态的优缺点
4.1 优点
- 提高代码复用性,减少冗余。
- 提高代码的扩展性,易于维护和修改。
- 使用多态提高代码的灵活性,能适应更多场景。
4.2 缺点
- 可能导致类之间的耦合性增加。
- 过度使用继承可能导致层次复杂,难以管理。