目录

继承接口的实现类和直接重写接口的方法有何区别?

# 继承接口的实现类和直接重写接口的方法有何区别?

  1. 继承接口的实现类,可以在实现类里面添加很多方法供继承的子类使用
  2. 继承接口的实现类,顶端是一个接口,制定了良好的结构,方便拓展

Java编程领域中,接口可以为不同类顺利交互提供标准

  • 接口可以降低类的依赖性,提高彼此的独立性

  • 接口是系统中最高层次的抽象类型。

  • 接口本身必须十分稳定,接口一旦定制,就不允许随意修改,否则对接口实现类以及接口访问都会造成影响。

在Java编程,abstract class 和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在,才使得Java成为面向对象的编程语言。

  • 定义接口有利于代码的规范
  • 有利于对代码进行维护
  • 保证代码的安全和严密

如果你一个接口,只有一个实现类对应的话,其实你享受不到接口的好处,而且还会觉得制造了很多麻烦。

但你如果有一组类有类似的“行为”,需要对他们进行约束的话,接口就必不可少了,会发现不再考虑具体的实现,大大减少了编程的复杂度。

#

接口只是一个规范,所以里面的方法都是空的。

假如我开了一个宠物粮店,声明所有宠物都可以来我这里买粮食,这就相当于一个接口,

当一只狗看到了,知道自己是宠物,所以它去实现这个接口

当一只猫看到了,知道自己也是宠物,所以也去实现这个接口

当狗和猫来我的店之前,我是不知道他们到底是什么,但是当他们来到我的店,我就知道一个要猫粮食,一个要狗粮食。因为他们都实现了 我这个接口,都可以买。

好了,这个时候我这个老板出现了,我可以给他们卖粮食了,相当于测试类

这样运行的结果就是

我是猫,我要买猫粮

我是狗,我要买狗娘

你知道吗,整个过程我这个店主其实根本不知道来的到底是猫是狗还是其他什么,我只要有一个店小二,把这些来的不知什么动物都全部交给店小二,店小二就知道怎么去卖了,因为这些狗啊猫啊都实现了我这个宠物店的接口,而店小二就负责接待所有实现了我这个接口的动物。这就有一个好处,假如明天来了一头小猪,只要它实现了我这个接口,我只管交给店小二处理就OK了,我这个店小二根本不需要变化,我这个店主也只需要实例化一下这个动物就OK

你想,假如没有接口,会怎么办,来一个猫,我要去创造一个猫,还要实例化,来一只狗,我要创建一只狗,同样要实例化,还要配备专门的店小二去接待,就会相当麻烦

#

接口是个规范”,这句没错。

不如直接就在这个类中写实现方法岂不是更便捷”,你怎么保证这个接口就一个类去实现呢?如果多个类去实现同一个接口,程序怎么知道他们是有关联的呢?

既然不是一个类去实现,那就是有很多地方有用到,大家需要统一标准。甚至有的编程语言(Object-C)已经不把接口叫 interface,直接叫 protocol。

统一标准的目的,是大家都知道这个是***做什么***的,但是具体不用知道具体***怎么做***。

比如说:

我知道 Comparable 这个接口是用来比较两个对象的,那么如何去比较呢?

数字有数字的比较方法,字符串 (opens new window)有字符串的比较方法,学生(自己定义的类)也有自己的比较方法。

然后,在另外一个负责对象排序(不一定是数字喔)的代码里面,肯定需要将两个对象比较。

这两个对象是什么类型呢?

Object a,b?肯定不行,a > b 这样的语法无法通过编译。

int a,b?也不行?一开始就说了,不一定是数字。

....

所以,Comparable 就来了。他告诉编译器,a b 两个对象都满足 Comparable 接口,也就是他们是可以进行比较的。具体怎么比较,这段程序不需要知道。

所以,他需要一些具体的实现,Comparable 接口有一个方法,叫 compareTo。那么这个方法就是用来取代 <、> 这样的运算符 (opens new window)

因为运算符是编译器保留给内置类型(整数、浮点数)进行比较用的,而不是一个广义的比较运算。

如果你可以明白 JDK 自身库里面诸如 Comparable 这样已经有的接口,那么就很容易理解自己在开发程序的时候为什么需要用到接口了。

上次更新: 2022/05/13 21:13:15
最近更新
01
关于我
07-14
02
科学上网
11-15
03
OSS+CDN
09-23
更多文章>
极昼青春
买辣椒也用券