如何实现具有不同数量参数的抽象方法
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);
}
}
我有四个 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(...)
if (animals.get(i) instanceof Dog){
if(animals.get(i).getName().equals(name))
{
((Dog) animals.get(i)).Edit(name, color, diet, habitat, temperament, breed);
}
}