今天刚学的java继承,然后把课后编程题的实例做一个总结
编程要求:设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下。
·编写抽象类Animal
Animal抽象类有两个抽象法cry()和getAnimalName(),即要求各种具体的动物给出自己的叫声和种类名称。
·编写模拟器类Simulator
该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型。即参数animal可以调用Animal的子类重写的cry()方法播放具体动物的声音,调用子类重写的getAnimalName()方法显示动物种类的名称。
·编写Animal类的子类:Dog类和Cat类
UML图略
·编写主类Application的main方法中至少包含如下代码:
Simulator simulator=new Simulator();
simulator.playSound(new Dog());
simulator.playSound(new Cat());
在编程之前首先要理清思路,对于初学者来说,这些都是简单的编程,而给出了许多提示。这就更便于我们进行程序设计。由于UML图没法在设计器里面画出来,这里就省略了。
首先,有五个类,Simulator,Animal,Dog,Cat和主类Application.而Simulator依赖于Animal类,Dog类和Cat类是Animal的子类。
根据要求依次设计类,首先我们编写Animal类,代码如下。
public abstract class Animal { //根据要求声明抽象类使用abstract关键字 public abstract void cry(); public abstract String getAnimalName(); }然后编写模拟器类Simulator
public class Simulator { public void playSound(Animal animal){ System.out.println(animal.getAnimalName()+"的叫声是:"); animal.cry(); } }编写Animal类的子类:Dog类和Cat类
public class Dog extends Animal { //要求各种动物给出自己的名字和叫声 String name="小白"; //故需要声明名字name和叫声cry()方法 public String getAnimalName() { System.out.println("我的名字是:"+name); return name; } public void cry() { System.out.println("汪汪......"); } } public class Cat extends Animal { //Cat和Dog类一样,都是继承Animal父类,使用关键字extends String name="小咪"; public String getAnimalName() { System.out.println("我的名字是:"+name); return name; } public void cry() { System.out.println("喵猫......"); } }最后我们需要编写主类Application
public class Application { public static void main(String[] args) { Simulator simulator=new Simulator (); simulator.playSound(new Dog()); simulator.playSound(new Cat()); //Animal animal =new Dog(); //simulator.playSound(animal); //上面两行代码等价于右边4行代码 //Animal animal=new Cat(); //simulator.playSound(animal); } }我们用cmd来运行编写的代码(环境已经配置好,如果不会配置java环境参考小编的Java环境配置文章)。
这是最后运行成功的结果,这样小猫和小狗的名字和叫声就能输出了。