我有四个类,一个是抽象类,两个是派生类。 在抽象类我有方法编辑,它包含4个参数我希望我的派生类具有相同的方法,但参数数量不同。
抽象类Animal
的代码public abstract class Animal {
protected String name;
protected String color;
protected String diet;
protected String habitat; }
public abstract void Edit(String name, String color, String diet, String habitat);
派生类狗的代码
public class Dog extends Animal {
private String temperament;
private String breed; }
public void Edit(String name, String color, String diet, String habitat, String temperament, String breed) {
setName(name);
setColor(color);
setDiet(diet);
setHabitat(habitat);
setTemperament(temperament);
setBreed(breed);
}
派生类鸟的代码
public class Bird extends Animal {
private String feather; }
public void Edit(String name, String color, String diet, String habitat, String feather) {
setName(name);
setColor(color);
setDiet(diet);
setHabitat(habitat);
setFeather(feather);
}
我在派生类中遇到错误,我需要这个抽象方法,因为我需要在我的AnimalList类中使用它,如下所示:
public class AnimalList {
ArrayList<Animal> animals = new ArrayList<Animal>();
public void EditDog(String strName, String name, String color, String diet, String habitat, String temperament, String breed){
for(int i=0; i<animals.size();i++){
if (animals.get(i) instanceof Dog){
if(animals.get(i).getName().equals(name))
{
animals.get(i).Edit(name, color, diet, habitat, temperament, breed);
}
}
}
}
public void EditBird(String strName, String name, String color, String diet, String habitat, String feather){
for(int i=0; i<animals.size();i++){
if (animals.get(i) instanceof Bird){
if(animals.get(i).getName().equals(name))
{
animals.get(i).Edit(name, color, diet, habitat, feather);
}
}
}
}
答案 0 :(得分:0)
如果方法Edit
对于每种类型的派生类实际上都是不同的,那么你必须检查列表中的对象是什么类(并且你在if (animals.get(i) instanceof Dog){...}
中这样做)然后这意味着你的方法不通用=不适用于所有动物。所以我认为有一个抽象的方法是没有意义的。所有派生的抽象类必须具有与超类中声明的方法相同的签名(名称和参数数量)。
为Dog,Bird ...实现单独的Edit方法,并在每个if(...)
if (animals.get(i) instanceof Dog){
if(animals.get(i).getName().equals(name))
{
((Dog) animals.get(i)).Edit(name, color, diet, habitat, temperament, breed);
}
}