接口vs抽象类、继承vs组合,他们之间有啥关系

简介: 接口vs抽象类、继承vs组合,他们之间有啥关系

正文


接口实现类,继承和组合他们之间的关系是非常重要的,或许,你现在编写代码感受不到,但是用到的时候,就会感觉,以前的设计者们的智慧。

在开始说一下比较编程的技巧之前,一起来看一看他们之前的区别吧!


接口和抽象类


抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:

a、抽象类不能被实例化只能被继承;

b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;

c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;

d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;

e、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。

接口:Java中接口使用interface关键字修饰,特点为:

a、接口可以包含变量、方法;变量被隐示指定为public static final修饰的,方法被隐示指定为public abstract(JDK1.8之前);

b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;

c、一个类可以实现多个接口;

d、JDK1.8中对接口增加了新的特性:

(1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;(2)、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。


继承和组合


继承与组合都是面向对象中代码复用的方式。继承,父类的内部细节对子类可见,其代码属于白盒式的复用,而组合中,对象之间的内部细节不可见,其代码属于黑盒式复用。继承在编码过程中就要指定具体的父类,其关系在编译期就确定,而组合的关系一般在运行时确定。继承强调的是is-a的关系,而组合强调的是has-a的关系。


编程技巧:在编写代码的同时,如果有多个类需要调用一个公共的代码片段,这个时候,可以有2种选择来提取公共的方法。第一种:写一个公共的类,之后,用到的他的地方,分别进行引入。第二种的方式,是写一个抽象类,进而采用采用继承的方式调用他。如何选择呢?如果这个共同的代码,与需要调用他的代码关联性比较强的时候,这个时候,应该采用继承抽象类的方式实现。如果关联性不强,而且有动态改变对象的时候,这个时候,应当使用第一种的方式实现。


重要的地方:在选择如何使用组合还是继承的时候,应优先选择组合的方式,不应该选择继承的方式,因为继承的方式是属于白盒式复用,可以直接修改原来的数据结构,这样做是非常不安全的,下面给出一个以前分析的以前文章。

相关文章
|
29天前
|
C++
4. C++类的组合
4. C++类的组合
26 0
|
1月前
|
C++
52继承与组合
52继承与组合
9 0
|
8月前
|
C++
C++类的组合
C++类的组合
|
7月前
2.【类的组合(在一个类中定义一个类)】
2.【类的组合(在一个类中定义一个类)】
16 0
|
8月前
|
Java
类之间的比较
类之间的比较
35 0
|
8月前
|
算法 C语言 C++
C++类的组合练习
C++类的组合练习
普通类,抽象类和接口之间的区别
普通类,抽象类和接口之间的区别
|
Java
抽象类和接口的区别(通俗易理解)
抽象类和接口的区别(通俗易理解)
476 0
|
存储 Java
类与类的关系
## 继承关系 1.子类想要继承父类,通过extends关键字来实现 2.子类继承了父类,可以调用父类中(public protected)的属性和方法 2.1构造方法严格意义来说 不算做子类继承过来 只是单纯的在子类调用构造方法时默认调用父类的构造方法 2.2程序块严格意义来说 不算做子类继承过来(子类自己调用不到 没名字) 程序块子类不能直接调用 子类执行构造方法之前 默认调用了父类的构造方法 父类构造方法之前自动执行父类的块 3.子类除了能继承父类的属性和方法外,子类还可以添加自己独有的成员(属性 方法)
92 0
|
存储 Java 开发者
类和类之间的继承关系
## 前言: 你们是使用者(用户) 我是ArrayBox类型的一个具体的对象 想要存储椅子 你们把椅子直接交给我box 以前直接找到数组那个人 我就可以帮你们存起来啦 存储的时候你们自己找位置 至于我把椅子存在了哪里 长度够不够 都不用你们管 如果数组存满啦自己想办法 数组是一个开发者创建好的类型 数组是一个小容器 存储一组元素 添加元素 获取元素 删除元素
92 0