gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:06:55 25 4
gpt4 key购买 nike

我有四个类,一个是抽象类,两个是派生类。在抽象类中,我有方法 edit,它包含 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);
}

派生类bird的代码

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

最佳答案

如果方法 Edit 实际上对于每种派生类都是不同的,并且您必须检查列表中的对象是什么类型的类(并且您在 if (animals.get(i) instanceof Dog){...} 中执行此操作),那么这意味着您的方法不是通用的 = 不适用于所有动物。所以我认为抽象方法没有意义。所有派生的抽象类必须与父类(super class)中声明的方法具有相同的签名(名称和参数数量)。

为 Dog、Bird 实现单独的 Edit 方法...并在每个 if(...) 中为适用的类转换一个 Animal

if (animals.get(i) instanceof Dog){
if(animals.get(i).getName().equals(name))
{
((Dog) animals.get(i)).Edit(name, color, diet, habitat, temperament, breed);
}
}

关于java - 如何实现具有不同参数数量的抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28774323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com