接口与抽象类的区别

简介: 接口与抽象类的区别

实现代码重用的两个机制--接口和抽象类,这两个概念在初次接触的时候很容易分不清,现在我就把它们两放在一起对比一下。


接口

简单说就是用来与其它对象进行交互用的,即对象之间的交互是靠接口来实现的,不必关心具体的实现,实现改变也不会影响接口,也就是不影响使用接口的对象。面向对象的设计讲究的是尽可能的为用户提供最小的接口,我们都知道封装的概念,而接口就是封装实现的最重要的概念之一。最常说的一个例子就是插座,对电器来说提供一个标准的插空就可以,电器也不必关心,电的工作原理是什么,即便电的工作原理改变,只要插座不变,就不会对电器产生影响。


抽象类

“在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。”

在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。而在C++中没有接口的概念,抽象类就提供了接口的功能。那为什么Java要提出接口的构造呢,因为C++中支持多重继承,而Java不支持,也许就是为了弥补这一点,才提出了接口的概念。


两者区别

接口与抽象类

抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。

人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它

一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)

接口定义方法,不能实现,而抽象类可以实现部分方法。

JAVA类具有单继承,多实现的特点。每个类只能继承一个父类对象,但是可以实现多个父接口,顺序为:先继承,在实现。


那么接口的作用是什么呢?

1、Java单继承的原因所以需要曲线救国作为继承关系的一个补充。

2、把程序模块进行固化的契约,降低偶合。把若干功能拆分出来,按照契约来进行实现和依赖。

3、定义接口有利于代码的规范。(接口分离原则)


 抽象类的特点:

       1.抽象类不能直接用new来实现

       2.必须使用abstract修饰符去修饰

       3.抽象类里可以有普通方法

       4.抽象类里的抽象方法使用abstract修饰符去修饰,抽象方法没有方法体。(交给子类实现)

       5.抽象类会被间接创建,因为在创建子类对象时先创建的是父类对象,这样抽象类作为父类会被间接的实例化,所以抽象

       类也有构造器。

       6.如果抽象类中具有抽象方法,子类必须实现抽象方法


   ******子类继承了抽象类,就必须重写抽象类中的所有方法


 抽象类不能被直接创建对象实例,只能被子类继承。


接口与抽象类

抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。

人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它

一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)

接口定义方法,不能实现,而抽象类可以实现部分方法。

JAVA类具有单继承,多实现的特点。每个类只能继承一个父类对象,但是可以实现多个父接口,顺序为:先继承,在实现。


那么接口的作用是什么呢?

1、Java单继承的原因所以需要曲线救国作为继承关系的一个补充。

2、把程序模块进行固化的契约,降低偶合。把若干功能拆分出来,按照契约来进行实现和依赖。

3、定义接口有利于代码的规范。(接口分离原则)


 抽象类的特点:

       1.抽象类不能直接用new来实现

       2.必须使用abstract修饰符去修饰

       3.抽象类里可以有普通方法

       4.抽象类里的抽象方法使用abstract修饰符去修饰,抽象方法没有方法体。(交给子类实现)

       5.抽象类会被间接创建,因为在创建子类对象时先创建的是父类对象,这样抽象类作为父类会被间接的实例化,所以抽象

       类也有构造器。

       6.如果抽象类中具有抽象方法,子类必须实现抽象方法

 

 ******子类继承了抽象类,就必须重写抽象类中的所有方法

 抽象类不能被直接创建对象实例,只能被子类继承。


接口与抽象类

抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。


人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它

一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)

接口定义方法,不能实现,而抽象类可以实现部分方法。

JAVA类具有单继承,多实现的特点。每个类只能继承一个父类对象,但是可以实现多个父接口,顺序为:先继承,在实现。


那么接口的作用是什么呢?

1、Java单继承的原因所以需要曲线救国作为继承关系的一个补充。

2、把程序模块进行固化的契约,降低偶合。把若干功能拆分出来,按照契约来进行实现和依赖。

3、定义接口有利于代码的规范。(接口分离原则)


 抽象类的特点:

       1.抽象类不能直接用new来实现

       2.必须使用abstract修饰符去修饰

       3.抽象类里可以有普通方法

       4.抽象类里的抽象方法使用abstract修饰符去修饰,抽象方法没有方法体。(交给子类实现)

       5.抽象类会被间接创建,因为在创建子类对象时先创建的是父类对象,这样抽象类作为父类会被间接的实例化,所以抽象

       类也有构造器。

       6.如果抽象类中具有抽象方法,子类必须实现抽象方法

   ******子类继承了抽象类,就必须重写抽象类中的所有方法

 抽象类不能被直接创建对象实例,只能被子类继承。


在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。


相关文章
|
4月前
|
Java
抽象类和接口有什么区别?
抽象类和接口有什么区别?
|
2天前
|
Java
接口和抽象类的区别
接口和抽象类的区别
16 6
|
20天前
|
Java
抽象类和接口的区别
抽象类和接口的区别
27 0
|
1月前
|
算法 C++
c++接口(抽象类)
c++接口(抽象类)
15 0
|
4月前
|
Java 编译器
抽象类和接口
抽象类和接口
30 0
|
8月前
接口和抽象类有什么区别
接口和抽象类有什么区别
46 0
|
9月前
抽象类和普通类的区别
抽象类和普通类的区别
77 0
抽象类、接口的区别和相似点(一)
抽象类、接口的区别和相似点(一)
112 0
抽象类、接口的区别和相似点(一)
抽象类和接口解析
1.抽象类 有abstrat修饰的类。 特点: 1. 可以有非抽象的变量和方法。 2. 只能使用public和protect修饰。 3. 子类必须实现抽象类的抽象方法。(如果除了子类也是抽象类) 4. 有构造方法。
88 0
抽象类和接口解析