抽象类和接口的区别

Posted Einsam

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类和接口的区别相关的知识,希望对你有一定的参考价值。

抽象类:
1)由abstract关键字修饰
2)包含抽象方法的类必须是抽象类不包含抽象方法的类也可以声明为抽象类
3)抽象类不能被实例化
4)抽象类是需要被继承的,需要重写或者声明为抽象类:
4.1)重写所有抽象方法
4.2)也声明为抽象类
5)抽象类的意义:
5.1)封装子类共有的属性和行为
5.2)为所有子类提供一种统一的类型
5.3)可以包含抽象方法,为所有子类提供统一的入口每个子类的实现不同,但入口是一致的
接口:
1)是一个标准、规范遵守了这个标准,就能干某件事
2)接口是一种数据类型(引用类型)
3)由interface定义
4)只能包含常量和抽象方法
5)接口不能被实例化
6)接口是需要被实现的,实现类:必须重写接口中的所有抽象方法
7)一个类可以实现多个接口,用逗号隔开若又继承又实现时,应先继承后实现
8)接口可以继承接口


抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。

接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,
那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。

如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

 

区别
1.语法层面上的区别
  1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
  2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
  3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
  4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
2.设计层面上的区别
  1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为
,但是接口却是对类局部(行为)进行抽象。

  2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。

以上是关于抽象类和接口的区别的主要内容,如果未能解决你的问题,请参考以下文章

抽象类和接口区别

抽象类和接口的区别

抽象类和接口的区别

抽象类和接口的区别

php抽象类和接口的区别

抽象类和接口的区别