接口与抽象类的区别

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

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


接口

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


抽象类

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

在 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 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。


相关文章
|
7月前
|
Java
接口和抽象类的区别
接口和抽象类的区别
106 6
|
7月前
|
Java
抽象类和接口有什么区别?
抽象类和接口有什么区别?
|
2月前
抽象类和接口在实现多态时的区别
【10月更文挑战第19天】抽象类和接口在实现多态时都有其独特的作用。抽象类更适合用于定义一些具有共同特征和部分实现的类,而接口则更强调定义一组行为规范,以便不同的类可以实现并组合这些行为。
56 10
|
3月前
|
C# 索引
C# 一分钟浅谈:接口与抽象类的区别及使用
【9月更文挑战第2天】本文详细对比了面向对象编程中接口与抽象类的概念及区别。接口定义了行为规范,强制实现类提供具体实现;抽象类则既能定义抽象方法也能提供具体实现。文章通过具体示例介绍了如何使用接口和抽象类,并探讨了其实现方式、继承限制及实例化差异。最后总结了选择接口或抽象类应基于具体设计需求。掌握这两者有助于编写高质量的面向对象程序。
135 5
|
7月前
|
C++
c++接口(抽象类)
c++接口(抽象类)
66 1
|
7月前
|
Java 编译器
抽象类和接口
抽象类和接口
|
7月前
|
Java
抽象类和接口的区别
抽象类和接口的区别
89 0
接口和抽象类有什么区别
接口和抽象类有什么区别
62 0
抽象类、接口的区别和相似点(一)
抽象类、接口的区别和相似点(一)
146 0
抽象类、接口的区别和相似点(一)
抽象类与接口
抽象类 abstract修饰符可以用来修饰方法,也可以用来修饰类,修饰方法就是抽象方法,修饰类就是抽象类 抽象类中可以没有抽象方法,但是抽象方法的类一定要声明为抽象类 抽象类,不能使用new关键字来创建对象,它使用来让子类继承的 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的 子类继
下一篇
DataWorks