美文网首页
抽象类(abstract class)和接口(interface

抽象类(abstract class)和接口(interface

作者: GGatsby | 来源:发表于2018-07-28 22:16 被阅读6次

参考文章:

https://www.cnblogs.com/wangyangliuping/articles/5568501.html

https://www.cnblogs.com/dolphin0520/p/3811437.html

https://www.jianshu.com/p/76d45592f075(超赞)

接口和抽象类用户实现OOP中重要的一个特质---抽象。抽象是将事物的共同(通用)特性提取出来,子类实现时必须要实现抽象类中的所有抽象方法和接口中的所有方法。其实,接口是抽象方法的集合。

接口和抽象类天生是为了继承。

抽象类不能用于创建实例,但是具有main方法,可以运行。

接口

接口的设计主要是为了支持运行时动态方法解析。接口的设计主要是为了多态。

由于动态方法解析都是是需要别的类去实现或重写,所以接口的使用并不需要创建自己的实例,因此为了保证单一工作而废除了构造器。当用户执行某个接口方法时,只需要用接口引用去指向对应的一个实现类即可达到动态方法的目的。

接口被设计为支持运行时动态方法解析。通常情况下,为了能够从一个类中调用另外一个类的方法,在编译时这两个类都需要存在,进而使Java编译器能够进行检查以确保方法签名是兼容的。这个要求本身造成了一个静态的并且是不可扩展的类系统。

对于这类系统,在类层次中,功能不可避免地被堆积得越来越高,导致整个机制中的子类越来越多。

设计接口的目的就是为了避免这个问题。接口断开了一个方法或一系列方法的定义与继承层次之间的关联。由于接口在不同的类层次中,因此就类层次而言,不相关的类可以实现相同的接口。这是接口的功能所在。

——摘自《Java8编程参考官方教程》

如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。

如果你往接口中添加方法,那么你必须改变实现该接口的类。

什么时候使用抽象类和接口

如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。

如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。

如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

设计理念

抽象类

对类的抽象。是对同一个类型下共有的特性抽象。是作为一系列子类的模板设计。一般用于定义一系列类的公有功能和操作。而留下抽象方法给子类,去实现子类独有的特性。

抽象类是一种自下而上的设计,先有了子类,然后提取子类公有的特性与行为,构成抽象类。

抽象类与子类是is-a关系,父类和派生的子类在概念上是相同的,存在的是父子关系,是一种重耦合。

接口

对行为的抽象。它定义了一种规范,更多的是辐射类型的设计。一般用于延伸类的行为方式。

接口是一种自上而下的设计,先规定行为方法,然后由类去实现这些行为,就可以成为接口的实现类。

接口与实现类是like-a关系,接口与实现类的关系只是定义了行为,本质上并无实质关系,只是契约层面的关系。

相关文章

网友评论

      本文标题:抽象类(abstract class)和接口(interface

      本文链接:https://www.haomeiwen.com/subject/ssfamftx.html