如何将对象及其子类作为对象的参数

How to have an object and its subclasses as a parameter of an object

我有一个基本问题,但我不知道如何解决。请帮助我!

如果我有 class Zoo

public class Zoo{
    private Animal animal;
    private Long age;
}

Animal段是这样的:

public class Animal{
    private String name;
}

但现在我有一个新的 class 是:Dog class, extends animal

public class Dog extends Animal {
    private String dogClass;
}

我想让Zoo中的animal属性也接受Dogclass参数,怎么办?

有没有像List<? extends Animal>这样优雅的写法?

如果我没记错的话,要按照你的要求去做,你所要做的就是在父子 classes 中插入构造函数并以这种方式关联它们的值:

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

public class Dog extends Animal{
    private String dogClass;
    public Dog(){
    super(dogClass);
    }
}

此外,如果您已经计划永远不直接实例化 Animal class,因为它是一个通用对象,您可以将其抽象化。

您无需更改任何内容:作为 Dog 扩展 Animal,它可以分配给字段 Zoo.animal。但是,您可以在 Zoo 中添加一个方法来获取 animal 作为特定 class:

的实例
public <T extends Animal> T getAnimal(Class<T> animalClass) {
    return animalClass.cast(animal);
}

或者,如果 animal 不是指定的 class,您不希望它抛出异常:

public <T extends Animal> T getAnimal(Class<T> animalClass) {
    if (!animalClass.isInstance(animal)) {
        return null;
    }
    return animalClass.cast(animal);
}

更新:

但也许你想要的是类型化的 Zoo:

public class Zoo<T extends Animal> {
    private T animal;
    private Long age;

    public T getAnimal() {
        return animal;
    }

    public setAnimal(T animal) {
        this.animal = animal;
    }
}