我有一個超類(動物)和兩個子類(青蛙和獅子)。在我下面的私人方法中,我創建了三個獅子和一個青蛙。我在第一個循環中顯示動物的所有四個重量,並在第二個循環中顯示所有獅子的名字。我得到正確的輸出,但是我的老師告訴我「在主方法中不需要創建兩個ArrayLists」。我猜他建議我使用我的第一個ArrayList來訪問我的Lion子類的getName()方法。通過超類對象的ArrayList訪問子類方法?
這是我做到了,這是工作:
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列表訪問我的getName()函數?我想我可以做一些鑄造做到這一點,就像這樣:
//ArrayList<Lion> lionList = createList();
for(int j = 0; j < 3; j++){
System.out.println(animalList.(Lion)get(j).getName());
}
但是,這並不工作..我不明白,我也應該去我的獅子子類的getName()方法,而不創建另一個的ArrayList ..
這裏是我班的其餘部分:
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;
}
}
做青蛙也有名稱(如「弗雷迪青蛙」) ?也許也是'getName()'方法?你的老師可能會建議你將'getName()'方法移到'Animal'類。 –
是的青蛙也有一個getName()方法。該指令明確表示,在動物類中沒有關於動物名稱的任何內容,但是.. – JakeFromStateFarm