问答详情
源自:10-1 Java 中的多态

多态的问题

public class Demo {

    public static void main(String[] args){

        Master ma = new Master();

        ma.feed(new Animal(), new Food());

        ma.feed(new Cat(), new Bone());

        ma.feed(new Dog(), new Fish());

    }

}

class Animal{

    public void eat(Food f){

        System.out.println("我是一个小动物,正在吃" + f.getFood());

    }

}

class Cat extends Animal{

    public void eat(Food f){

        System.out.println("我是一只小猫咪,正在吃" + f.getFood());

    }

}

class Dog extends Animal{

    public void eat(Food f){

        System.out.println("我是一只狗狗,正在吃" + f.getFood());

    }

}

class Food{

    public String getFood(){

        return "事物";

    }

}

class Fish extends Food{

    public String getFood(){

        return "鱼";

    }

}

class Bone extends Food{

    public String getFood(){

        return "骨头";

    }

}

class Master{

    public void feed(Animal an, Food f){

        an.eat(f);

    }

}


提问者:慕瓜7080925 2016-07-20 17:30

个回答

  • Smile丶微冷
    2016-07-24 15:02:09
    已采纳

    Cat,Dog继承于Animal,可以使用Animal类型的变量来引用Cat和Dog的对象,Food类似。以ma.feed(new Cat(), new Bone());为例,feed(Animal an, Food f),an是Animal类型的变量,引用了Cat的对象,即可以使用Cat对象中所有从Animal继承的方法,而an实际引用的是Cat而不是Animal,所以调用方法时调用的就是Cat中的方法。Food的情况类似。

  • 慕瓜7080925
    2016-07-20 17:38:59

    有谁能解释一下怎么实现的