参数中的java多态性

t8e9dugd  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(196)

我遇到了变形函数调用的问题。我检查了其他问题,但这些问题只问没有参数的函数。在我的例子中,我需要使用参数,所以它决定运行哪个方法,这取决于输入参数的类。
我想做的是有一个动物列表,里面有狗、猫等,当我调用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");
    }

}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题