Java review(11) 多态实现养鸡场
/**
* 鸡
*/
class Chicken {
void eat() {
System.out.println(this + "吃饭了");
}
void doSomething() {
System.out.println(this + "琢人了");
}
}
/**
* 公鸡
*/
class Cock extends Chicken {
@Override
void doSomething() {
System.out.println(this + "打鸣了");
super.doSomething();
}
}
/**
* 母鸡
*/
class Hen extends Chicken {
@Override
void doSomething() {
System.out.println(this + "下蛋了");
super.doSomething();
}
}
@Test
public void test1() throws Exception {
Chicken[] chickens = new Chicken[10];
System.out.println("养鸡场里有10只鸡:");
Random random = new Random();
for (int i = 0; i < chickens.length; i ++) {
// 随机生成公鸡或母鸡
chickens[i] = random.nextBoolean() ? new Cock() : new Hen();
}
for (Chicken chicken : chickens) {
chicken.eat();
chicken.doSomething();
}
}
输出结果:
养鸡场里有10只鸡:
cn.hengyumo.review.r1.Test9$Cock@61e4705b吃饭了
cn.hengyumo.review.r1.Test9$Cock@61e4705b打鸣了
cn.hengyumo.review.r1.Test9$Cock@61e4705b琢人了
cn.hengyumo.review.r1.Test9$Hen@50134894吃饭了
cn.hengyumo.review.r1.Test9$Hen@50134894下蛋了
cn.hengyumo.review.r1.Test9$Hen@50134894琢人了
cn.hengyumo.review.r1.Test9$Hen@2957fcb0吃饭了
cn.hengyumo.review.r1.Test9$Hen@2957fcb0下蛋了
cn.hengyumo.review.r1.Test9$Hen@2957fcb0琢人了
cn.hengyumo.review.r1.Test9$Cock@1376c05c吃饭了
cn.hengyumo.review.r1.Test9$Cock@1376c05c打鸣了
cn.hengyumo.review.r1.Test9$Cock@1376c05c琢人了
cn.hengyumo.review.r1.Test9$Cock@51521cc1吃饭了
cn.hengyumo.review.r1.Test9$Cock@51521cc1打鸣了
cn.hengyumo.review.r1.Test9$Cock@51521cc1琢人了
cn.hengyumo.review.r1.Test9$Cock@1b4fb997吃饭了
cn.hengyumo.review.r1.Test9$Cock@1b4fb997打鸣了
cn.hengyumo.review.r1.Test9$Cock@1b4fb997琢人了
cn.hengyumo.review.r1.Test9$Cock@deb6432吃饭了
cn.hengyumo.review.r1.Test9$Cock@deb6432打鸣了
cn.hengyumo.review.r1.Test9$Cock@deb6432琢人了
cn.hengyumo.review.r1.Test9$Hen@28ba21f3吃饭了
cn.hengyumo.review.r1.Test9$Hen@28ba21f3下蛋了
cn.hengyumo.review.r1.Test9$Hen@28ba21f3琢人了
cn.hengyumo.review.r1.Test9$Hen@694f9431吃饭了
cn.hengyumo.review.r1.Test9$Hen@694f9431下蛋了
cn.hengyumo.review.r1.Test9$Hen@694f9431琢人了
cn.hengyumo.review.r1.Test9$Hen@f2a0b8e吃饭了
cn.hengyumo.review.r1.Test9$Hen@f2a0b8e下蛋了
cn.hengyumo.review.r1.Test9$Hen@f2a0b8e琢人了
多态的精髓在于其动态性。
基于接口、虚类也能实现多态,Java 8 接口也支持了default方法,这时候取舍便有些困难了。
但是继承方式有它的显著的短板,继承只能是单继承,而接口可以实现多个。
继承也有接口实现不了的优点,它可以抽象出公用的代码,尤其配合泛型使用时效果更佳。
要使用好多态是需要良好的设计作为前提的,如果设计太过粗糙,那么使用继承、多态会平添复杂性。
慎之,慎之。
版权声明
本文章由作者“衡于墨”创作,转载请注明出处,未经允许禁止用于商业用途
发布时间:2019年11月28日 17:52:17
备案号:
闽ICP备19015193号-1
关闭特效
评论区#
还没有评论哦,期待您的评论!
引用发言