分享

Java接口和抽象类的本质区别

 狄伦视角 2021-05-30

1、抽象类特点

  1. 抽象类不可以被实例化,实例化由子类去完成

  2. 抽象方法必须由子类重写(非抽象子类,抽象子类可不重写)

  3. 只要有抽象方法,就是抽象类

  4. 可以实现具体的方法,也可以不实现

  5. abstract 不能与private、static、final或native并列修饰同一个方法

  6. 可以和普通方法一样有成员变量,常量等。

2、接口特点:

  1. interface 是 public 的

  2. 可以定义常量,会自动被 public static final 修饰

  3. java 8 以后可以加 default 关键字实现方法

  4. 不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。

  5. 可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}

  6. 在实现多接口的时候一定要避免方法名的重复

3、抽象类和接口的区别

语法层面

抽象类不能被多继承,
接口可以被多实现。也可以被多继承。

抽象层次

抽象类是对类抽象,而接口是对行为的抽象

跨域不同

抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类

抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" 关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的, 有点 “like-a” 的意思, 仅仅是实现了接口定义的契约而已。

设计层次

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

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多