目录
题目
编写程序模拟主人喂养宠物的场景,要求编写主人类Master,宠物有狗类(Dog)、 猫类(Cat),主人应该有喂养宠物的方法(feed),宠物应该有吃的方法(eat),只要主人喂宠物,宠物就吃。要求达到可以喂养多种宠物。
不使用多态机制
public class Test05 {
public static void main(String[] args) {
Dog d = new Dog();
Cat c = new Cat();
Master m = new Master();
m.feed(d);
m.feed(c);
}
}
//主人类
class Master {
public void feed(Dog d) {
d.eat();
}
public void feed(Cat c) {
c.eat();
}
}
//狗类
class Dog {
public void eat() {
System.out.println("狗狗喜欢啃骨头,吃的很香");
}
}
//猫类
class Cat {
public void eat() {
System.out.println("猫咪喜欢抓老鼠吃");
}
}
运行结果:
但是我们分析一下,上面的代码貌似看起来很简单,没有冗余,但是现在这个主人又有了新的需求,他还想养一只鸟儿,那我们不但要添加一个鸟类,还要修改主人类,给主人类再添加一个喂养鸟儿的方法,这样显得很麻烦,代码的耦合度很高,扩展性低。
使用多态机制
下面我们使用多态机制来做这道题目:引入一个宠物类(Pet)作为父类。
public class Test05 {
public static void main(String[] args) {
Dog d = new Dog();
Cat c = new Cat();
Brid b = new Brid();
Master m = new Master();
m.feed(d);
m.feed(c);
m.feed(b);
}
}
//主人类
class Master {
public void feed(Pet p) {
p.eat();
}
}
//宠物类
class Pet {
public void eat() {
}
}
//狗类
class Dog extends Pet {
public void eat() {
System.out.println("狗狗喜欢啃骨头,吃的很香");
}
}
//猫类
class Cat extends Pet {
public void eat() {
System.out.println("猫咪喜欢抓老鼠吃");
}
}
//鸟类
class Brid extends Pet {
public void eat() {
System.out.println("小鸟喜欢吃虫子,这对人们很有好处");
}
}
运行结果:
总结多态的作用
多态机制在我们的开发中很常见,它能够降低程序的耦合度,提高程序的扩展性。拿上面的案例来说,主人后来还想养一只鸟,这代表实际中客户的新需求。我们得满足客户的这个需求。