继承与多态
在掌握了类与对象的基础概念和封装机制后,我们来学习面向对象编程的另外两个重要特性:继承和多态。继承是一种代码复用机制,允许子类继承父类的属性和方法;多态是一种面向对象特性,允许同一操作作用于不同对象产生不同行为。
作用
继承和多态使代码更加灵活和可扩展,减少了代码重复,提高了代码的可维护性。它们允许我们以统一的方式处理不同类型的对象,同时保持各自的特殊行为。通过继承,我们可以复用现有代码;通过多态,我们可以实现更灵活的程序设计。
例子
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方法不能被重写