设计一个名为SimUDuck的鸭子模拟游戏,游戏中会出现各种鸭子,有红头鸭,野鸭,橡皮鸭,分析这些鸭子都会叫,会游泳。
此游戏内部使用标准OO技术,设计一个鸭子超类,并让各种鸭子继承此超类。
简单的实现为:
package com.lissdy;
public class SimUDuck {
public static void main(String[] args)
{
MallardDuck duck1=new MallardDuck();
RedheadDuck duck2=new RedheadDuck();
System.out.println("野鸭子出场-----------------");
System.out.println(duck1.quack());
System.out.println(duck1.swim());
System.out.println(duck1.display());
System.out.println("红鸭子出场-----------------");
System.out.println(duck2.quack());
System.out.println(duck2.swim());
System.out.println(duck2.display());
}
}
abstract class Duck
{
public String quack()
{
return "呱呱叫";
}
public String swim()
{
return "会游泳";
}
public abstract String display();
}
class MallardDuck extends Duck
{
public String display()
{
return "外观是绿头";
}
}
class RedheadDuck extends Duck
{
public String display()
{
return "外观是红头";
}
}
现在程序增加需求,需要加入会飞的鸭子。而如果在超类中加上fly()就会导致所有鸭子都具备fly(),连同玩具橡皮鸭也无法免除。
如果继续使用继承的话需要将超类中不符合的行为覆盖,例如:
package com.lissdy;
public class SimUDuck {
public static void main(String[] args)
{
MallardDuck duck1=new MallardDuck();
RedheadDuck duck2=new RedheadDuck();
RubberDuck duck3=new RubberDuck();
System.out.println("野鸭子出场-----------------");
System.out.println(duck1.quack());
System.out.println(duck1.swim());
System.out.println(duck1.display()+" "+duck1.fly());
System.out.println("红鸭子出场-----------------");
System.out.println(duck2.quack());
System.out.println(duck2.swim());
System.out.println(duck2.display()+"