目录
改变Master类的feed方法的参数列表
- package com.hspedu.poly_;
-
- public class Master {
- private String name;
-
- public Master(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void feed(Animal animal, Food food){
- System.out.println("主人" + name + "给"+ animal.getName() + "喂" +
- food.getName());
- }
-
- }
1)animal的编译类型是Animal,可以指向(接收)Animal子类的对象
2)food的编译类型是Food,可以指向(接收)Food子类的对象
在Poly01.java中测试,为了区分加~
- package com.hspedu.poly_;
-
- public class Poly01 {
- public static void main(String[] args) {
- Master master = new Master("小李");
- Dog spike = new Dog("Spike~");
- Bone bone = new Bone("大骨头~");
-
- master.feed(spike,bone);
- Cat tom = new Cat("Tom~");
- Fish fish = new Fish("鱼罐头~");
- master.feed(tom,fish);
- }
- }
-

因为spike是Dog类的对象,Dog类是Animal的子类,Animal可以接收子类的对象的传参;bone传参的原理也是如此
增加宠物Pig类继承Aniaml类,增加食物Rice类,继承Food类,别的都不需要,在Poly01中直接创建新对象然后调用feed方法即可,这就是多态的便利
- package com.hspedu.poly_;
-
- public class Pig extends Animal{
- public Pig(String name) {
- super(name);
- }
- }
- package com.hspedu.poly_;
-
- public class Rice extends Food{
- public Rice(String name) {
- super(name);
- }
- }
- package com.hspedu.poly_;
-
- public class Poly01 {
- public static void main(String[] args) {
- Master master = new Master("小李");
- Dog spike = new Dog("Spike~");
- Bone bone = new Bone("大骨头~");
- master.feed(spike,bone);
-
- Cat tom = new Cat("Tom~");
- Fish fish = new Fish("鱼罐头~");
- System.out.println("===============");
- master.feed(tom,fish);
-
- Pig pig = new Pig("猪猪侠");
- Rice rice = new Rice("八宝饭");
- System.out.println("============");
- master.feed(pig,rice);
-
- }
- }
-
