跳转至

继承与多态

在掌握了类与对象的基础概念和封装机制后,我们来学习面向对象编程的另外两个重要特性:继承和多态。继承是一种代码复用机制,允许子类继承父类的属性和方法;多态是一种面向对象特性,允许同一操作作用于不同对象产生不同行为。

作用

继承和多态使代码更加灵活和可扩展,减少了代码重复,提高了代码的可维护性。它们允许我们以统一的方式处理不同类型的对象,同时保持各自的特殊行为。通过继承,我们可以复用现有代码;通过多态,我们可以实现更灵活的程序设计。

例子

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 : 继承

详细说明

  1. 继承的特点:

    • 子类继承父类的属性和方法,实现代码复用
    • 子类可以重写父类方法,实现自己的行为
    • 子类可以添加新的属性和方法,扩展功能
    • Java只支持单继承,一个类只能有一个父类
  2. Object类:

    • Object是Java中所有类的根类,所有类都直接或间接继承自Object
    • 提供基础方法实现,如toString()、equals()、hashCode()等
    • 这些方法可以被重写以满足特定需求
    • 是Java类体系的根基,确保所有对象都具有基本功能
  3. 多态的实现:

    • 父类引用指向子类对象,实现向上转型
    • 方法重写实现多态,同一方法不同行为
    • 运行时动态绑定,根据实际对象类型调用方法
  4. 核心概念:

    • extends:继承关键字,建立父子类关系
    • @Override:方法重写注解,确保正确重写
    • super:访问父类成员,调用父类方法

注意事项

  1. Java是单继承,一个类只能继承一个父类
  2. 重写方法访问权限不能比父类更严格
  3. 父类私有成员不能被继承
  4. 构造方法不被继承,但可通过super调用
  5. final类不能被继承,final方法不能被重写