很多语言中,抽象类和接口的使用环境都很像,但是它们之间还是有很多区别的!
总结4点:
1、语法不同
首先,定义方式不同,一个是abstract class, 一个是interface。 其次,前者中可以有非abstract的方法,可以有变量。而后者中所有的方法都是abstract的,一般没有变量,如果有变量,也必须是static final的。另外,接口中,不可以有private的方法。
2、由于java是单继承的,所以子类只能继承一个abstract的类,却可以implements多个接口。
3、当需要修改原先设计的时候,由于interface中不能有默认方法,所以每个implements它的类,都需要进行修改。而abstract class允许有默认方法,我们只要给新增的方法一个默认的定义,就可以不影响原有设计了。
4、最后一个,是出于对面向对象设计模式的理解来考虑的,据说是最重要的。由于继承关系联系的父类、子类,在本质上是一样的,他们是"is a"的关系。而implements interface的类,是"like a"的关系。