Java 抽象类和接口的区别
接口和抽象类的对比
面试问道了接口和抽象类。这个超级简单的问题竟然答错了,最后整理一遍,一边夯实自己的记忆。
首先要明白 抽象类时 abstract 接口时interface。所谓的接口,并不是开发过程中A项目组和B项目组对接的接口。abstract 是用来修饰class的,interface 和class 是两种类型。
在组成上,
抽象类中可以有默认防范,也可以有抽象方法。并且抽象类中的方法可以全部是抽象方法,也可以全部都有默认方法。抽象方法在使用中可以继承别的类,也可以实现别的接口, !!!重点!!! 抽象类可以extend别的类的同时也实现别的接口。和正常类一样。
接口中必须全部是抽象方法,不能有方法体,就是这么干脆利落。接口可以实现接口??省省吧,接口可以继承不能实现,因为接口没有方法体,但是接口可以继承接口,这样实现这个接口的类需要是实现多个两个接口的方法了。
附一个接口和抽象类的对比图:
引用自:http://www.importnew.com/12399.html
这位博主说的接口的多继承有点问题,自己试了一下,接口时不能继承类的,正如上文所说,接口中没有实体方法。
在使用方面
- 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
- 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
- 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
上面这位博主写的不错,引用了。
附:
接口时可以定义变量的,亲测。但至少是default级别的。