学习总结20-04-15:接口的好处

前言:接口真的算是开发中最最常听到的词了。调某某公司的某某接口、USB接口、前后端约定接口等等。但是我好像真的是一知半解。我知道接口就是interface,就是一个只有静态变量,和抽象方法,可以多继承等等。其实不太明白为什么都在说面向接口编程,为什么可以直接调的都要调接口。

接口的语法

  1. 接口使用interface关键字声明
  2. 接口中只能定义公开的静态常量
  3. 接口中只能定义公开的抽象方法
  4. 接口不是类,不能说它是特殊的类。

接口与抽象类的异同

同:
  1. 都能编译称字节码文件
  2. 都不能创建对象(接口不是类,抽象类虽然有构造方法,但是不能实例化)
  3. 都能申明引用
  4. 都有Object定义的方法
异:
  1. 接口中的属性只能是公开静态常量(隐式使用public static final修饰)
  2. 接口中的方法只能是公开抽象方法(隐式使用public abstract修饰)
  3. 没有构造方法、没有动态代码块、没有静态代码块

为什么要有接口

类之间继承的原因总是为了抽象出公共的部分,增加代码的利用率。
比如三个类,猫(Cat)、狗(Dog)、鱼(Fish)。
他们都有的方法,吃(eat())、睡(sleep())等,都有的属性,年龄、名字等
就可以把它们都抽取出来,定义一个父类动物(Animal)。
这就是继承的作用。
但是java是单继承,就有其不足。
比如,狗和鱼都有方法,游(swim())、猫和狗都有方法(叫(call()))。不是每个类都有,但也不是只有一个类有,都自己定义就很麻烦,有不能抽象到父类中。
这种情况下,接口声明一种能力,就派上用场了。
鱼和狗都实现Swimmable接口,猫和狗都实现Callable接口。
但这有什么用呢?

接口的多态

我们知道,父类对象作为方法参数可以实现多态。关注的是一类事物。
用接口作为方法参数的多态,关注的一种能力一种行为,显然适用范围更加广泛。
比如,一个方法需要实现开车(drive)的能力,可以用传入一个司机(Driver)的对象。但是往往不只是只有司机才能开始,比如大学生、同事、老师等等。
如果有一个接口(Drivable),只要实现这个接口就有开车这个能力。比如老师实现了这个接口,就可以把老师的实例对象传入这个方法。
可以发现,接口大大地增强了程序的拓展性。
某个方法需要什么某种功能,我就定义一个接口,实现这个接口的类可以不断地更新,调用这个接口的代码就不会随着实现类的改变需要调整。降低了模块直接的耦合性。
这也就是为什么,项目里面每个模块都是调用其他模块的接口,而不是直接调用其实现类。

生活中的接口

接口好处不只是体现在编程开发中,在生活也同样有实例。
比如USB,调用USB接口的设备,不用去考虑USB接口是谁实现的。只要调就好了。
USB的实现类,也不用管,谁会调,只要实现它该有功能就可以了。这样就可以大大降低各个设备间交互成本。
比如电脑上有USB接口,它要调用USB接口与其他设备的交互,与U盘:数据的更新与删除、与鼠标、与带USB的风扇等等,一个接口可以完成多个功能。
总之,接口通过规定和定义某一种功能和行为,把具有相同功能或行为的多种完全不同的事物联系在了一起。虽然接口中的方法很虚无,但正是这种虚无让事物之间可以通过共性相互交互。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值