使用父类作为方法形参和返回值实现多态 使用多态实现主人领养三只宠物并喂养宠物的过程。 (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 22:50:15 浏览: 35
以下是实现上述要求的Java代码:
Animal.java
```java
package net.hnjdzy.unit07.exercise04;
public abstract class Animal {
public abstract void eat();
}
```
Dog.java
```java
package net.hnjdzy.unit07.exercise04;
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗在吃骨头");
}
}
```
Cat.java
```java
package net.hnjdzy.unit07.exercise04;
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫在吃鱼");
}
}
```
Bird.java
```java
package net.hnjdzy.unit07.exercise04;
public class Bird extends Animal {
@Override
public void eat() {
System.out.println("鸟在吃虫子");
}
}
```
Master.java
```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:
break;
}
return animal;
}
public void feed(Animal an) {
System.out.print("主人正在喂养:");
an.eat();
}
}
```
Test04.java
```java
package net.hnjdzy.unit07.exercise04;
public class Test04 {
public static void main(String[] args) {
Master master = new Master();
Animal animal1 = master.getAnimal(1);
master.feed(animal1);
Animal animal2 = master.getAnimal(2);
master.feed(animal2);
Animal animal3 = master.getAnimal(3);
master.feed(animal3);
}
}
```
在以上代码中,主人类Master定义了两个方法:getAnimal(int typeId)和feed(Animal an)。getAnimal(int typeId)方法通过传入不同的类型id(1、2、3),返回不同的Animal子类实例(Dog、Cat、Bird)。feed(Animal an)方法接收一个Animal类型的参数,通过调用它的eat()方法喂养宠物。
在Test04类中,我们通过创建一个Master实例,并分别用它领养三只宠物(狗、猫、鸟),然后用feed()方法喂养它们。由于feed()方法接收的参数是Animal类型,而Animal类是Dog、Cat、Bird类的父类,因此我们可以使用多态的特性,用一个方法feed()来喂养不同种类的宠物。