摘要 类 及其在 Java 中的 children 出现问题。真糊涂
Trouble with Abstract classes and their children in Java. Really confused
嗨,我是 java 的新手,遇到了一些问题。我有一个问题,但我不确定如何表达它,所以我试着举个例子。
首先假设我有三个共享同一个包的 classes。
首先假设我有以下摘要 class:
public abstract class Animal {
protected String name;
protected String type;
public String getType() {
return this.type;
}
}
以及下面的childclass
public class Lion extends Animal {
public Animal (String name, String dietType) {
this.name = name;
this.type = dietType;
}
然后假设我有另一个 class 跟踪与 Lion 和 Animal 共享相同包的动物列表。 class 有一种方法可以将动物添加到它拥有的 ArrayList 中。问题是当我尝试在 class 中创建一个 Lion(一种动物)并将其添加到 ArrayList of Animals 时它不会添加。
public class AnimalList {
private ArrayList<Animal> animalList = new ArrayList<Animal>();
public void addAnimal(Animal animal) {
Lion lion1 = new Lion("Simba", "Carnivore");
animalList.add(lion1);
}
}
如果我想将 Lion 添加到动物的 ArrayList 中,我该怎么做?我是否必须将狮子塑造成动物?但是狮子已经是动物了不是吗?
只有一个重大问题会阻止您的代码在语法上正确且可运行。您在 Lion
class 中错误地命名了构造函数。 class 应该这样定义:
public class Lion extends Animal {
public Lion (String name, String dietType) {
this.name = name;
this.type = dietType;
}
另一个问题是意图。正如@Nickolai 所说,您可能不想在 AnimalList
class 中添加特定的动物,而是添加您传入的 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);
}
这段代码基本上回答了你的问题。是的,Lion
已经是 Animal
,所以不需要类型转换就可以将 Lion
传递给 addAnimal
方法,即使它接受 Animal
作为参数。
嗨,我是 java 的新手,遇到了一些问题。我有一个问题,但我不确定如何表达它,所以我试着举个例子。
首先假设我有三个共享同一个包的 classes。 首先假设我有以下摘要 class:
public abstract class Animal {
protected String name;
protected String type;
public String getType() {
return this.type;
}
}
以及下面的childclass
public class Lion extends Animal {
public Animal (String name, String dietType) {
this.name = name;
this.type = dietType;
}
然后假设我有另一个 class 跟踪与 Lion 和 Animal 共享相同包的动物列表。 class 有一种方法可以将动物添加到它拥有的 ArrayList 中。问题是当我尝试在 class 中创建一个 Lion(一种动物)并将其添加到 ArrayList of Animals 时它不会添加。
public class AnimalList {
private ArrayList<Animal> animalList = new ArrayList<Animal>();
public void addAnimal(Animal animal) {
Lion lion1 = new Lion("Simba", "Carnivore");
animalList.add(lion1);
}
}
如果我想将 Lion 添加到动物的 ArrayList 中,我该怎么做?我是否必须将狮子塑造成动物?但是狮子已经是动物了不是吗?
只有一个重大问题会阻止您的代码在语法上正确且可运行。您在 Lion
class 中错误地命名了构造函数。 class 应该这样定义:
public class Lion extends Animal {
public Lion (String name, String dietType) {
this.name = name;
this.type = dietType;
}
另一个问题是意图。正如@Nickolai 所说,您可能不想在 AnimalList
class 中添加特定的动物,而是添加您传入的 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);
}
这段代码基本上回答了你的问题。是的,Lion
已经是 Animal
,所以不需要类型转换就可以将 Lion
传递给 addAnimal
方法,即使它接受 Animal
作为参数。