java中抽象类及其子类的问题真的很困惑

bweufnob  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(360)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

上个月关门了。
改进这个问题
嗨,我对java很陌生,有一些问题。我有一个问题,我不知道该怎么说,所以我试着举个例子。
首先假设我有三个类共享同一个包。首先假设我有以下抽象类:

public abstract class Animal {
    protected String name;
    protected String type;

    public String getType() {
        return this.type;
    }
}

接下来的孩子们

public class Lion extends Animal {

    public Animal (String name, String dietType) {
        this.name = name;
        this.type = dietType;

}

然后假设我有另一个类,它跟踪与lion和animal共享相同包的动物列表。这个类有一个方法可以将动物添加到它所拥有的arraylist中。问题是,当我试图在类中创建一个lion(这是一种动物)并将其添加到arraylist中时,它不会添加。

public class AnimalList {
    private ArrayList<Animal> animalList = new ArrayList<Animal>();

    public void addAnimal(Animal animal) {
        Lion lion1 = new Lion("Simba", "Carnivore");
        animalList.add(lion1);
    }
}

如果我想在动物列表中添加一只狮子,我会怎么做?我要把狮子打成动物吗?但是狮子已经是动物了,不是吗?

y53ybaqx

y53ybaqx1#

只有一个严重的问题会阻止代码语法正确和可运行。您在应用程序中错误地命名了构造函数 Lion 班级。该类的定义如下:

public class Lion extends Animal {

    public Lion (String name, String dietType) {
        this.name = name;
        this.type = dietType;

}

另一个问题是意图。正如@nickolai所说,你可能不想在你的大脑中加入一种特定的动物 AnimalList 类,而不是添加 Animal 你过去了,所以:

public class AnimalList {
    private ArrayList<Animal> animalList = new ArrayList<Animal>();

    public void addAnimal(Animal animal) {
        animalList.add(animal);
    }
}

为了完成这张照片,这里有一个 main 将执行代码的方法:

public static void main(String[] args) {
    AnimalList al = new AnimalList();
    Lion lion1 = new Lion("Simba", "Carnivore");
    al.addAnimal(lion1);
}

这个代码基本上回答了您的问题。是的,a Lion 已经是一个 Animal ,因此不需要类型转换来传递 Lion 进入 addAnimal 方法,即使它接受 Animal 作为参数。

相关问题