如何实现具有不同数量参数的抽象方法

How to implement abstract method with different number of parameters

我有四个 classes,一个是抽象的 class,两个是派生的 classes。 在摘要中 class 我有方法编辑,它包含 4 个参数我希望我的派生 classes 具有相同的方法但参数数量不同。

抽象代码class动物

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);

派生 class 狗的代码

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);
}

派生代码 class 鸟

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);
}

我在派生的 classes 中遇到错误,我需要这个抽象方法,因为我需要在我的 AnimalList class 中使用它,如下所示:

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);
            }
        }
    }
}

如果方法 Edit 实际上对于每种派生 class 都是不同的,并且您必须检查列表中的对象是哪种 class (并且您这样做在 if (animals.get(i) instanceof Dog){...}) 那么这意味着你的方法不是通用的 = 不适用于所有动物。所以我认为有一个抽象方法是没有意义的。所有派生的抽象 classes 必须与 superclass.

中声明的方法具有相同的签名(名称和参数数量)

为狗、鸟...实施单独的编辑方法,并在每个 if(...)

中为适用的 class 投射动物
if (animals.get(i) instanceof Dog){
    if(animals.get(i).getName().equals(name))
    {
         ((Dog) animals.get(i)).Edit(name, color, diet, habitat, temperament, breed);
    }
}