Java 中子类对象放到父类集合中

在面向对象编程中,子类和父类是重要的概念。Java 语言通过继承机制允许子类继承父类的属性和方法,这为代码的复用和扩展提供了便利。在实际开发中,一个常见的需求是将子类对象存储到父类集合中。本篇文章将介绍这一概念,并给出相应的代码示例。

理论基础

在 Java 中,可以通过继承创建一个类的子类。子类继承了父类的所有属性和方法,并可以根据需要进行扩展或重写。利用多态性,我们可以将子类对象赋值给父类类型的引用,从而实现将子类对象放到父类集合的需求。

以下是一个简单的类图,展示了Animal类及其子类DogCat的关系:

classDiagram
    class Animal {
        +String name
        +void sound()
    }

    class Dog {
        +void sound()
    }

    class Cat {
        +void sound()
    }

    Animal <|-- Dog
    Animal <|-- Cat

代码示例

接下来,我们将通过代码示例来演示如何将子类对象放入父类集合中。代码示例如下:

import java.util.ArrayList;
import java.util.List;

// 父类
class Animal {
    String name;

    public Animal(String name) {
        this.name = name;
    }

    public void sound() {
        System.out.println("Animal sound");
    }
}

// 子类 Dog
class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    @Override
    public void sound() {
        System.out.println(name + " says: Woof!");
    }
}

// 子类 Cat
class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    @Override
    public void sound() {
        System.out.println(name + " says: Meow!");
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建一个父类集合
        List<Animal> animals = new ArrayList<>();

        // 添加子类对象
        animals.add(new Dog("Rex"));
        animals.add(new Cat("Whiskers"));

        // 遍历集合并调用方法
        for (Animal animal : animals) {
            animal.sound();
        }
    }
}

在上述代码中,我们创建了一个父类Animal和两个子类DogCat。然后我们在Main类中创建了一个List<Animal>集合,并将两个子类对象添加到这个集合中。最后,我们遍历集合并调用每个对象的sound方法,演示了多态的特性。

关系图

为了更好地理解这种关系,我们可以用 ER 图展示它们之间的关系:

erDiagram
    ANIMAL {
        string name
    }
    DOG {
        string name
    }
    CAT {
        string name
    }
    
    ANIMAL ||--o| DOG : "is a"
    ANIMAL ||--o| CAT : "is a"

在这里,ANIMAL是父类,DOGCAT是两个子类。每个子类对象都可以被视为一个ANIMAL类型的对象。

结尾

通过本篇文章,我们介绍了 Java 中子类对象如何放在父类集合中的基本原理及代码实现。利用继承和多态,我们能够更灵活地处理对象,提高代码的可读性和扩展性。理解这一概念对 Java 编程的学习非常重要,希望本文对你有所帮助。