今天刚学的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环境配置文章)。
这是最后运行成功的结果,这样小猫和小狗的名字和叫声就能输出了。