search.png
关于我
menu.png
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方法,这时候取舍便有些困难了。

但是继承方式有它的显著的短板,继承只能是单继承,而接口可以实现多个。

继承也有接口实现不了的优点,它可以抽象出公用的代码,尤其配合泛型使用时效果更佳。

要使用好多态是需要良好的设计作为前提的,如果设计太过粗糙,那么使用继承、多态会平添复杂性。

慎之,慎之。

版权声明

知识共享许可协议 本文章由作者“衡于墨”创作,转载请注明出处,未经允许禁止用于商业用途

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
发布时间:2019年11月28日 17:52:17

评论区#

还没有评论哦,期待您的评论!

关闭特效