为什么有了接口还要增加一层抽象类?

简介: 为什么有了接口还要增加一层抽象类?

接口:

接口里的方法和抽象类中的方法一样,它的方法是抽象的,也就是说接口是不能具体化成对象的,


抽象类:

所谓抽象类是指只声明方法的存在而不去实现它的类,抽象类不能实例化,也就是不能创建对象。


抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能定义成抽象类,抽象类里可以没有抽象方法。


区别:

  表象:

 抽象类可以给出一些成员的实现,接口却不包含成员的实现,抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现,一个类只能继承一个抽象类,但是可以实现多个接口等。


  深层次理解:

1.类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象。接口是对类的局部(行为)进行抽象,而抽象类是对类整体(字段、属性、方法)的抽象。不论接口、抽象类、类、甚至对象,都是在不同层次、不同角度进行抽象的结果。他们的共性就是抽象。


如果行为跨域不同类的对象(飞机、麻雀、超人),可使用接口;对于一些相似的类的对象(猫狗),可继承抽象类。


2.抽象类是从子类中发现公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知道子类的存在,方法如何实现还不确定,预先定义。


3.抽象类是自底向上抽象出来的,而接口则是自顶向下设计出来的。


类图

使用抽象类前

image.png


使用抽象类后

image.png


为什么有了接口还要增加一层抽象类?

   让抽象类去实现接口,而不是每个实现类去实现接口,实现类一致的行为(或者说大部分一致的行为)在抽象类中进行实现,而不一致的行为(或者一小部分不一致的行为),在抽象类中写成抽象方法,让子类去重写,减少子类重写接口所有方法的负担。


相关文章
|
设计模式 存储 Java
JAVA设计模式11:组合模式,以统一的方式处理单个对象和组合对象
JAVA设计模式11:组合模式,以统一的方式处理单个对象和组合对象
177 0
|
设计模式 存储 安全
【大话设计模式】抽象 接口 集合 泛型
【大话设计模式】抽象 接口 集合 泛型
【C++之封装与信息隐蔽】类的公用接口与私有实现的分离
【C++之封装与信息隐蔽】类的公用接口与私有实现的分离
普通类,抽象类和接口之间的区别
普通类,抽象类和接口之间的区别
接口vs抽象类、继承vs组合,他们之间有啥关系
接口vs抽象类、继承vs组合,他们之间有啥关系
|
Java
抽象类和接口的区别(通俗易理解)
抽象类和接口的区别(通俗易理解)
541 0
|
Java 测试技术 API
接口和抽象有什么区别?
接口和抽象有什么区别?
160 0
接口和抽象有什么区别?
|
Java
使用java反射机制读取任意类内部细节
使用java反射机制读取任意类内部细节
135 0
重复动作要封装,封装前找大家的共同特性或者说共同需求(例如都实现某个接口,都实现该接口的某个方法),然后利用这个共同特性封装起来
重复动作要封装,封装前找大家的共同特性或者说共同需求(例如都实现某个接口,都实现该接口的某个方法),然后利用这个共同特性封装起来
131 0
|
弹性计算 架构师 Java
【高并发】深度解析线程池中那些重要的顶层接口和抽象类
如果细细品味线程池的底层源码实现,你会发现整个线程池体系的设计是非常优雅的!这些代码的设计值得我们去细细品味和研究,从中学习优雅代码的设计规范,形成自己的设计思想,为我所用!哈哈,说多了,接下来,我们就来看看线程池中那些非常重要的接口和抽象类,深度分析下线程池中是如何将抽象这一思想运用的淋漓尽致的!
244 0
【高并发】深度解析线程池中那些重要的顶层接口和抽象类