Java 抽象类和接口的区别

接口和抽象类的对比

面试问道了接口和抽象类。这个超级简单的问题竟然答错了,最后整理一遍,一边夯实自己的记忆。

首先要明白 抽象类时 abstract 接口时interface。所谓的接口,并不是开发过程中A项目组和B项目组对接的接口。abstract 是用来修饰class的,interface 和class 是两种类型。

在组成上,
       抽象类中可以有默认防范,也可以有抽象方法。并且抽象类中的方法可以全部是抽象方法,也可以全部都有默认方法。抽象方法在使用中可以继承别的类,也可以实现别的接口, !!!重点!!! 抽象类可以extend别的类的同时也实现别的接口。和正常类一样。

       接口中必须全部是抽象方法,不能有方法体,就是这么干脆利落。接口可以实现接口??省省吧,接口可以继承不能实现,因为接口没有方法体,但是接口可以继承接口,这样实现这个接口的类需要是实现多个两个接口的方法了。

附一个接口和抽象类的对比图:

引用自:http://www.importnew.com/12399.html

这位博主说的接口的多继承有点问题,自己试了一下,接口时不能继承类的,正如上文所说,接口中没有实体方法。

 

在使用方面

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

上面这位博主写的不错,引用了。

 

附:

接口时可以定义变量的,亲测。但至少是default级别的。