反思任务:接口的概念,接口用来处理什么?接口与抽象类的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuyizhou95/article/details/82250934

问题参考:1.百度百科 抽象类——https://baike.baidu.com/item/%E6%8A%BD%E8%B1%A1%E7%B1%BB/4748292

                  2.浅谈Java的接口的作用和意义——https://baijiahao.baidu.com/s?id=1595511474536870490&wfr=spider&for=pc

                  3.为什么要定义接口?——https://blog.csdn.net/songjunyan/article/details/38447271

                  4.接口概念和作用——https://blog.csdn.net/weixin_42051619/article/details/81749056

反思的初衷不是为了分享,更多的是自我学习

一.what?接口是什么?抽象类又是什么?二者的区别?

接口的两种理解:

1.Java语言中的一种内置的结构,有特定语法与结构

2.一个类所具有的方法(该类所代表对象的现实属性)和特征的集合,是一种逻辑上的抽象。

一个接口只有方法的特征,没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 Java接口与Java抽象类是不一样的,抽象类可以实现某些方法,而接口则不能。

抽象类的两种理解:

1.Java语言中的一种内置的结构,有特定语法与结构

2.是对一系列看上去不同,但是本质上相同的具体概念的抽象。

二者的联系与区别:

接口是引用类型的,和抽象类的相似之处有三点:

  1. 不能实例化;

  2. 包含未实现的方法声明;

  3. 派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)。

抽象类与接口紧密相关。然而接口又比抽象类更抽象,这主要体现在它们的差别上:

  1. 类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。

  2. 抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明,没有具体实现的方法。通俗来说就是没有花括号{}

  3. 抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。

  4. 抽象类是对象的抽象,然而接口是一种行为规范。

接口更多的体现的是一种编程思想与规范。(这句话我还没有理解,需要好好琢磨)现在想到的就是可插拔,容易扩展维护。

而抽象更多的是体现多态

补充:

(1)抽象类与实现类之间是一种继承关系,也就是说如果采用抽象类的方式,则父类与子类在概念上应该是相同的。

(2)接口和实现类在概念上不要求相同,接口只是抽取相互之间没有关系的类的共同特征,而不去关注类之间的关系,它可以使没有层次关系的类具有相同的行为。

(3)抽象类是对一组具有相同属性和行为的逻辑上有关系的事物的一种抽象,而接口是对一组具有相同属性和行为的逻辑上不相关的事物的一种抽象。

(4)对于接口和抽象类的选择,反映出设计人员看待问题的不同角度。抽象类用于一组相关的事物,表示的是"is-a"(继承)的关系,而接口用于一组不相关的事物,表示的是"like-a"(具备)的关系。

二.why?为什么要有接口,接口的存在的意义作用?

接口代表着一种编程思想,定义结构最直接的目的就是让代码具有更强的可扩展性。

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

2、定义接口有利于代码的规范:对于一个大型项目而言,架构师往往会对一些主要的接口来进行定义,或者清理一些没有必要的接口。这样做的目的一方面是为了给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。

3、有利于对代码进行维护:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。可是在不久将来,你突然发现现有的类已经不能够满足需要,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。

4、保证代码的安全和严密:一个好的程序一定符合高内聚低耦合的特征,那么实现低耦合,定义接口是一个很好的方法,能够让系统的功能较好地实现,而不涉及任何具体的实现细节。这样就比较安全、严密一些,这一思想一般在软件开发中较为常见。

两个思考点:

1.在进行项目架构的时候,作为架构师,应该关注的是数据与业务的抽象结合,将like的部分进行抽离,定义一些接口,而不许需要关心具体的业务实现

2.如何实现高内聚低耦合是一个很大的范畴,还有很多需要学习地方

三.how?如何活用接口的概念,抽象类和接口都差不多,在什么时候才选择使用接口?

一、明明可以在类中直接写所需的方法,为什么还要多写一个接口(或抽象类)? 
       1. 减少代码的书写(上边分析的代码重载) 
       2. 提高了代码的可维护性和扩展性。 
       3. 在团队合作中,代码的规范性

二、抽象类和接口都差不多,在什么时候才选择使用接口? 
       1. 在当前类族中不是必须的(例如Tuger需要而Rabbit不需要)的方法时 
       2. 不同类族的多个类需要实现同样的方法时(接口)

至于如何活用接口的概念,这个对于目前得我来说还有很长的路要走,还需要思考。

猜你喜欢

转载自blog.csdn.net/liuyizhou95/article/details/82250934