设计原则 —— 针对接口编程而不针对实现编程

0. 理解

  • 接口,定义了一堆空实现函数的接口,如下,是对其全部实现类的约束,即必须实现我(接口)事先规定的那些方法,以使得我在操纵父类接口(指向子类实现)时,获得一种操作上的一致性(多态),而忽视其子类具体实现上的差异,即封装变化;

    public interface Iterator {
        boolean hasNext();
        Object next();
    }

1. 针对接口编程是多态性的体现

  • 针对对象编程简单地说,就是传递的是具体的子类;
    • 而针对接口编程,传递的则是父类引用,这样便可发挥多态性“父类引用指向子类对象”的特点和优势;

来看一个简答的例子:

public interface Animal {
    ...
    public void makeSound();
}

具体到“狗”,需给出其实现:

public class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("Wang! Wang!");
    }
}

同理可给出其他具体动物类(猪牛羊等)的叫声实现。此时如何传递动物的实例化对象,调用其叫声方法呢?

  • 针对实现编程:

    public void hearDogSound(Dog dog) {
        dog.makeSound();
    }

    如果需要调用牛的叫声方法:

    public void hearCowSound(Cow cow){
        cow.makeSound();
    }

    针对对象编程,每想调用不同子类对象的共有方法,都要去创建一个与该类相关的 hearSound() 方法,这样在 interface 中定义的共有方法便失去了意义。

  • 针对接口编程:

    public void hearSound(Animal animal) {
        animal.makeSound();
    }

转载于:https://www.cnblogs.com/mtcnn/p/9421281.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值