区别
1. 继承方面
- 抽象类只能单继承;接口可以多实现。
2. 成员属性方面:
- 抽象类中可以有普通属性,也可以有常量;
- 接口中的成员变量全部默认是常量,使用
public static final
修饰,这个可以省略不写。
3. 代码块方面
- 抽象类可以含有初始化块;接口不能含有初始化块。
4. 构造函数方面
- 抽象类可以有构造函数,但是这是的构造函数不是用来创建对象的,而是用来被实现类调用进行初始化操作的。
- 接口不能有构造函数。
5. 方法方面
- 接口在JDK1.8之后可以定义抽象方法(无方法体)、default修饰的默认方法(有方法体)、static修饰的静态方法(有方法体),JDK1.8以前只能有抽象方法。
public interface Test {
static void test() {
}
default void test2(){
}
void test3();// 默认是abstract修饰
}
- 抽象类中除了静态方法和抽象方法外还可以有普通方法。
相同点
- 接口与抽象类都不能被实例化,需要被其他进行实现或继承。
- 接口和抽象类里面都能包含抽象方法,实现接口或继承抽象类的子类都必须实现这些抽象方法。