【发布时间】:2016-01-16 14:34:34
【问题描述】:
我有一个超类(动物)和两个子类(青蛙和狮子)。在下面我的私人方法中,我正在创建三只狮子和一只青蛙。我在第一个循环中显示了所有四个动物的体重,在第二个循环中显示了所有狮子的名字。我得到了正确的输出,但我的老师告诉我“没有必要在你的 main 方法中创建两个 ArrayLists”。我猜他是在建议我使用我的第一个 ArrayList 来访问我的 Lion 子类的 getName() 方法。
我就是这样做的,而且效果很好:
import java.util.ArrayList;
public class AnimalTest {
public static void main(String[] args){
ArrayList<Animal> animalList = createList();
for(int i = 0; i < animalList.size(); i++){
System.out.println(animalList.get(i).getWeight() + " lbs");
}
ArrayList<Lion> lionList = createList();
for(int j = 0; j < 3; j++){
System.out.println(lionList.get(j).getName());
}
}
private static ArrayList createList(){
ArrayList<Animal> list = new ArrayList<Animal>();
list.add(new Lion("Leo I", 530.00));
list.add(new Lion("Leo II", 560.00));
list.add(new Lion("Leo III", 590.00));
list.add(new Frog("Freddie", 7.00));
return list;
}
}
他是否希望我通过同一个 ArrayList 列表从我的 Lion 类访问我的 getName() 函数?我在想我可以通过一些演员来做到这一点,就像这样:
//ArrayList<Lion> lionList = createList();
for(int j = 0; j < 3; j++){
System.out.println(animalList.(Lion)get(j).getName());
}
但这不起作用..我不明白我应该如何在不创建另一个 ArrayList 的情况下使用我的 Lion 子类的 getName() 方法..
这是我剩下的课程:
public class Animal {
private String genus;
private String species;
private double weight;
private boolean tail;
public Animal(){}
public Animal(String genus, String species){
this.genus = genus;
this.species = species;
}
public String getGenus(){
return genus;
}
public String getSpecies(){
return species;
}
public double getWeight(){
return weight;
}
public void setWeight(double weight){
this.weight = weight;
}
public boolean hasTail(){
return tail;
}
public void setTail(boolean tail){
this.tail = tail;
}
}
public class Lion extends Animal {
private String name;
public Lion(){}
public Lion(String name, double weight){
super("Panthera", "Leo");
this.name = name;
setWeight(weight);
setTail(true);
}
public String getName(){
return name;
}
}
public class Frog extends Animal {
private String name;
public Frog(){}
public Frog(String name, double weight){
super("Lithobates", "Catesbeianus");
this.name = name;
setWeight(weight);
setTail(false);
}
public String getName(){
return name;
}
}
【问题讨论】:
-
青蛙也有名字吗(如“Freddie the frog”)?也许还有
getName()方法?您的老师可能会建议您将getName()方法移至Animal类。 -
是的,Frogs 也有一个 getName() 方法。但是,说明中明确指出在 Animal 类中没有关于动物名称的任何信息..
标签: java inheritance arraylist polymorphism