定义一个抽象类Animal,有cry()和getAnimalName()两个抽象方法,Dog和Cat是Animal的子类,重写cry()和getAnimalName()方法;定义Simulator类,该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型。即参数animal可以调用Animal的子类重写的cry()方法播放具体动物的声音,调用子类重写的getAnimalName()方法显示动物种类的名称。编写测试类(命名为AnimalTest学号.java)验证。
时间: 2024-02-18 12:03:16 浏览: 127
好的,我来为你解答这个问题。
首先,定义抽象类Animal:
```java
public abstract class Animal {
public abstract void cry();
public abstract String getAnimalName();
}
```
其中,cry()和getAnimalName()方法都是抽象的,因为不同的动物会有不同的叫声和名称。
接下来,定义Dog和Cat类,分别继承Animal类,并重写cry()和getAnimalName()方法:
```java
public class Dog extends Animal {
@Override
public void cry() {
System.out.println("汪汪汪!");
}
@Override
public String getAnimalName() {
return "狗";
}
}
public class Cat extends Animal {
@Override
public void cry() {
System.out.println("喵喵喵!");
}
@Override
public String getAnimalName() {
return "猫";
}
}
```
在Simulator类中定义playSound(Animal animal)方法,用于播放动物的叫声和显示动物种类的名称:
```java
public class Simulator {
public void playSound(Animal animal) {
animal.cry();
System.out.println("这是一只" + animal.getAnimalName());
}
}
```
最后,在AnimalTest类中进行测试:
```java
public class AnimalTest {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
Simulator simulator = new Simulator();
simulator.playSound(dog);
simulator.playSound(cat);
}
}
```
输出结果如下:
```
汪汪汪!
这是一只狗
喵喵喵!
这是一只猫
```
我们可以看到,playSound()方法成功调用了不同Animal子类的cry()和getAnimalName()方法,并输出了正确的结果。
希望这个例子能够帮助你理解抽象类和多态的概念。
阅读全文