为了账号安全,请及时绑定邮箱和手机立即绑定

多态的问题

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

    }

}


正在回答

2 回答

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的情况类似。

1 回复 有任何疑惑可以回复我~
#1

慕瓜7080925 提问者

非常感谢!
2016-07-24 回复 有任何疑惑可以回复我~
#2

Smile丶微冷 回复 慕瓜7080925 提问者

不客气~
2016-07-24 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530629    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

多态的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信