题目要求:设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声。要求如下:
(1)编写抽象类Animal
Animal抽象类有2个抽象方法cry()和getAnimaName(),即要求各种具体的动物给出自己的叫声和种类名称。
(2)编写模拟器类Simulator
该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型。即参数animal可以调用Animal的子类重写的cry()方法播放具体动物的声音、调用子类重写的getAnimalName()方法显示动物种类的名称。
(3)编写Animal类的子类:Dog,Cat类
(4)编写主类Application(用户程序),要求实现多态,并测试上述功能。
实现效果视频:【Java】类继承机制(实验 上转型对象)_哔哩哔哩_bilibili
思路构建:新建父类Animal,定义cry方法和getAnimalName方法,其中cry方法置空用于子类重定义,getAnimalName方法因为是String类型必须返回值,所以返回一个空的name变量。接下来新建Dog和Cat子类,重写cry方法和getAnimalName方法,然后新建Simulator子类调用Dog和Cat类的cry方法和getAnimalName方法,最后使用Application类测试程序运行。
抽象类Animal代码如下:
package ex3;
public class Animal {
public void cry(){
}
public String getAnimalName(){
String name = "";
return name;
}
}
定义一个空的方法cry(),还有一个getAnimalName()方法,给出自己的名称。
模拟器类Simulator代码如下:
package ex3;
public class Simulator extends Animal{
public void playSound(Animal animal){
String name1,name2;
name1 = new Dog().getAnimalName();
System.out.println("名称:"+name1);
new Dog().cry();
name2 = new Cat().getAnimalName();
System.out.println("名称:"+name2);
new Cat().cry();
}
}
新建两个Animal类的子类对象,分别为dog和cat,接着输出名称,然后调用cry()方法发出声音。
Animal的子类Cat,Dog代码如下:
package ex3;
public class Cat extends Animal{
public void cry(){
System.out.println("喵喵喵~");
}
public String getAnimalName(){
String name = "喵星人";
return name;
}
}
package ex3;
public class Dog extends Animal{
public void cry(){
System.out.println("汪汪汪~");
}
public String getAnimalName(){
String name = "汪星人";
return name;
}
}
里面重写了cry()方法,发出猫和狗对应的声音。接着重写getAnimalName()方法,返回猫和狗的名字。
测试类Application代码如下:
package ex3;
public class Application {
public static void main(String[] args) {
Animal animal = new Animal();
new Simulator().playSound(animal);
}
}
主类中只新建了一个Animal对象,并且调用模拟器类进行playsound显示出动物的名称和其对应的叫声。
运行结果: