我遇到了变形函数调用的问题。我检查了其他问题,但这些问题只问没有参数的函数。在我的例子中,我需要使用参数,所以它决定运行哪个方法,这取决于输入参数的类。
我想做的是有一个动物列表,里面有狗、猫等,当我调用each.hits(otheranimal)方法时,它应该以另一个动物的类作为输入参数来运行函数。例如:dog hits cat->dog.hits(cat c)应该被调用。对于通过动物列表的迭代,我需要hits(animal a)抽象函数,否则它不起作用。但正因为如此,现在只调用.hits(animal a)函数,而不是以给定的子对象作为参数的函数。我知道我做错了什么,就是搞不明白。希望有人能开导我!
也许示例代码可以更好地解释它想要做什么,所以这里是:
public class PolyTest {
public static void main(String[] args) {
LinkedList<Animal> aList = new LinkedList<Animal>();
aList.add(new Dog(4,"wof"));
aList.add(new Cat(3, "mewoo"));
//every animal hits itself and every other animal
for(int i=0; i<aList.size(); i++) {
for(int j =0; j<aList.size(); j++) {
aList.get(i).hits(aList.get(j));
}
}
}
}
动物类别:
public abstract class Animal {
int legNum;
String sound;
public Animal(int legNum, String sound) {
this.legNum = legNum;
this.sound = sound;
}
abstract void hits(Animal a);
}
狗
public class Dog extends Animal{
public Dog(int legNum, String sound) {
super(legNum, sound);
}
@Override
public void hits(Animal a) {
System.out.println("Dog: Animal case");
}
public void hits(Dog d) {
System.out.println("Dog: pats other dog head");
}
public void hits(Cat c) {
System.out.println("Dog: hits cat");
}
}
猫
public class Cat extends Animal {
public Cat(int legNum, String sound) {
super(legNum, sound);
}
@Override
public void hits(Animal a) {
System.out.println("Cat: Animal case");
}
public void hits(Cat c) {
System.out.println("Cat: Purrs with cat");
}
public void hits(Dog d) {
System.out.println("Cat: Runs away");
}
}
暂无答案!
目前还没有任何答案,快来回答吧!