无意中发现了一位清华大佬的算法刷题笔记,关注公众号『勾玉技术』回复『清华算法』领取
接口和抽象类有什么区别?
接口是用interface声明,抽象类是用abstract修饰类,这是二者形式上的区别
接口,可以认为是对功能的抽象;抽象类,可以认为是对类别的抽象。
我们举个例子:男人和女人在生孩子。
那么,“人类”是男人与女人的本质属性,“生孩子”是二者的行为,所以前者可以被定义成抽象类,后者可以认为是接口。这指导了我们应该在某情况下定义抽象类还是接口,在于我们关注的是类别还是功能。
- 接口和抽象类都不能被实例化
- 接口的方法不能在接口里实现(jdk1.8后可以有默认实现),抽象类中除了抽象方法也可以有非抽象方法
- 接口除了static、final变量,不能有其他变量,抽象类可以
- 接口的方法修饰符为public,抽象类还可以有protected、default(不能有private,不然没法被重写)
- 一个类可以实现多个接口,但是只能实现一个抽象类
- 在 jdk 7 或更早版本中,接⼝⾥⾯只能有常量变量和抽象⽅法。这些接⼝⽅法必须由选择实现接⼝的类实现。
- jdk 8 的时候接⼝可以有默认⽅法和静态⽅法功能。
- Jdk 9 在接⼝中引⼊了私有⽅法和私有静态⽅法。