直接先说结论,就是可以减少冗余代码
难处
之前在学多态的时候,有个疑问:
比如
//父类
public abstract class Animal {
abstract void eat();
abstract void sleep();
}
//子类
public class Bird extends Animal {
@Override
void eat() {
System.out.println("鸟会吃饭");
}
@Override
void sleep() {
System.out.println("鸟会睡觉");
}
//特有能力
void fly() {
System.out.println("自己特有的能力,飞翔");
}
}
如果这个时候:
//直接用多态
Animal bird = new Bird();
bird.eat();
bird.sleep();
bird.fly();//会报错.
//如果直接用子类创建自身
Bird bird = new Bird();
bird.eat();
bird.sleep();
bird.fly();
//都是可以用的
——————————————我是分割线—————————————————————————
既然我用多态会损失自身特有的方法
我何必多次一举呢?
概念
多态(Polymorphism)按字面的意思就是“多种状态”。
在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。
看着定义,感觉一头雾水,啥叫多种状态,难不成还会变身?
还真的是变身,不过,就算 变身完之后,还是需要以夫类的身份进行活动
就像上面的例子,如果你是以动物的身份出现,就算你是鸟,也要抑制自己,不能使用飞翔的功能.
说到现在,那到底使用多态有什么好处呢?
明了
咱们举个例子
比如,现在森林举行运动会,动物们一听很开心.
每个动物都跑过来报名,那个场面太壮观了,不过,现场就出了问题:
动物太多了,主办方人不够,导致现场混乱,效率太低.
public class Organizer {
//报名注册方法
//猫来报名
public void Registration(Cat cat) {
}
//狗来报名
public void Registration(Dog dog) {
}
......
}
现在只要来一种动物,就要加一个方法,重复代码.
这时候,主办方加了限制条件,必须证明自己是动物
修改报名注册方法,只要一个方法就可以应付所有的动物报名.
public class Organizer {
//报名注册方法
public void Registration(Animal animal) {
}
}
那现在如何界定是不是动物呢?
//那就设置一个Animal的父类吧
public abstract class Animal {
void eat();
void sleep();
}
只要是继承Animal,就认为是动物,就有资格报名.
设计模式
如果想要更深入理解多态的好处,可以去了解,学习下设计模式。
网友评论