练习4:实现多态的两种方式 使用父类作为方法形参和返回值实现多态 使用多态实现主人领养三只宠物并喂养宠物的过程。 (1)创建包net.hnjdzy.unit07.exercise04; (2)在此包下定义抽象类Animal,有一个抽象方法eat(); (3)定义Dog类、Cat类和Bird类继承Animal抽象类,实现eat()抽象方法; (4)定义主人类Master,有一个领养宠物的方法Animal getAnimal(int typeId),一个喂养宠物的方法void feed(Animal an); (5)定义测试类Test04实现主人领养和喂养宠物。
时间: 2024-03-02 21:49:45 浏览: 36
好的,我可以为您提供一个示例代码来实现这个练习。
Animal 抽象类:
```java
package net.hnjdzy.unit07.exercise04;
public abstract class Animal {
public abstract void eat();
}
```
Dog 类:
```java
package net.hnjdzy.unit07.exercise04;
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗狗吃骨头。");
}
}
```
Cat 类:
```java
package net.hnjdzy.unit07.exercise04;
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫咪吃鱼。");
}
}
```
Bird 类:
```java
package net.hnjdzy.unit07.exercise04;
public class Bird extends Animal {
@Override
public void eat() {
System.out.println("鸟儿吃虫子。");
}
}
```
Master 类:
```java
package net.hnjdzy.unit07.exercise04;
public class Master {
public Animal getAnimal(int typeId) {
Animal animal = null;
switch (typeId) {
case 1:
animal = new Dog();
break;
case 2:
animal = new Cat();
break;
case 3:
animal = new Bird();
break;
default:
throw new IllegalArgumentException("Invalid animal type id: " + typeId);
}
return animal;
}
public void feed(Animal animal) {
animal.eat();
}
}
```
Test04 测试类:
```java
package net.hnjdzy.unit07.exercise04;
public class Test04 {
public static void main(String[] args) {
Master master = new Master();
Animal animal1 = master.getAnimal(1);
Animal animal2 = master.getAnimal(2);
Animal animal3 = master.getAnimal(3);
master.feed(animal1);
master.feed(animal2);
master.feed(animal3);
}
}
```
这个示例代码中,Animal 是一个抽象类,定义了一个抽象方法 eat()。Dog、Cat 和 Bird 继承 Animal 抽象类,并实现 eat() 方法。
Master 类有两个方法,getAnimal() 方法返回一个 Animal 对象,可以根据传入的类型 id 创建不同类型的 Animal 子类实例;feed() 方法接受一个 Animal 对象作为参数,调用其 eat() 方法。
在测试类 Test04 中,创建一个 Master 对象,然后根据不同的类型 id 创建不同类型的 Animal 对象,最后调用 feed() 方法喂养宠物。
这样,我们就通过使用父类作为方法形参和返回值实现了多态,使用多态实现了主人领养三只宠物并喂养宠物的过程。