继承与多态
在掌握了类与对象的基础概念和封装机制后,我们来学习面向对象编程的另外两个重要特性:继承和多态。继承是一种代码复用机制,允许子类继承父类的属性和方法;多态是一种面向对象特性,允许同一操作作用于不同对象产生不同行为。
作用
继承和多态使代码更加灵活和可扩展,减少了代码重复,提高了代码的可维护性。它们允许我们以统一的方式处理不同类型的对象,同时保持各自的特殊行为。通过继承,我们可以复用现有代码;通过多态,我们可以实现更灵活的程序设计。
例子
public class Animal {
// 受保护的属性,允许子类访问
protected String name;
// 构造方法
public Animal(String name) {
this.name = name;
}
// 可以被重写的方法
public void makeSound() {
System.out.println("动物发出声音");
}
}
public class Dog extends Animal {
// 子类构造方法,调用父类构造方法
public Dog(String name) {
super(name);
}
// 重写父类方法,实现多态
@Override
public void makeSound() {
System.out.println(name + "汪汪叫");
}
}
public class Cat extends Animal {
// 子类构造方法,调用父类构造方法
public Cat(String name) {
super(name);
}
// 重写父类方法,实现多态
@Override
public void makeSound() {
System.out.println(name + "喵喵叫");
}
}
public class Main {
public static void main(String[] args) {
// 创建动物对象,使用父类引用指向子类对象
Animal dog = new Dog("小黑");
Animal cat = new Cat("咪咪");
// 多态演示,同一方法调用产生不同行为
dog.makeSound(); // 输出:小黑汪汪叫
cat.makeSound(); // 输出:咪咪喵喵叫
}
}
图表说明
classDiagram
class Object {
+ toString()
+ equals(Object obj)
+ hashCode()
+ getClass()
}
class Animal {
# String name
+ Animal(String name)
+ makeSound()
}
class Dog {
+ Dog(String name)
+ makeSound()
}
class Cat {
+ Cat(String name)
+ makeSound()
}
Object <|-- Animal : 继承
Animal <|-- Dog : 继承
Animal <|-- Cat : 继承
详细说明
-
继承的特点:
- 子类继承父类的属性和方法,实现代码复用
- 子类可以重写父类方法,实现自己的行为
- 子类可以添加新的属性和方法,扩展功能
- Java只支持单继承,一个类只能有一个父类
-
Object类:
- Object是Java中所有类的根类,所有类都直接或间接继承自Object
- 提供基础方法实现,如toString()、equals()、hashCode()等
- 这些方法可以被重写以满足特定需求
- 是Java类体系的根基,确保所有对象都具有基本功能
-
多态的实现:
- 父类引用指向子类对象,实现向上转型
- 方法重写实现多态,同一方法不同行为
- 运行时动态绑定,根据实际对象类型调用方法
-
核心概念:
- extends:继承关键字,建立父子类关系
- @Override:方法重写注解,确保正确重写
- super:访问父类成员,调用父类方法
注意事项
- Java是单继承,一个类只能继承一个父类
- 重写方法访问权限不能比父类更严格
- 父类私有成员不能被继承
- 构造方法不被继承,但可通过super调用
- final类不能被继承,final方法不能被重写