接口与抽象类的区别
不同点
抽象类 | 接口 |
---|---|
可以有构造方法,子类创建时初始化 | 没有构造方法 |
可以有抽象方法和具体方法 | 有抽象方法和默认(jdk8)、静态(jdk8)、私有方法(jdk9) |
可以有成员变量 | 没有成员变量,只有public static final修饰的常量(无默认值) |
抽象类中抽象方法访问权限有public、protected、包访问权限 | 接口中抽象方法只能是public abstract修饰的(默认),可以省略不写 |
一个类只能继承一个抽象类 | 一个类可以实现多个接口 |
相同点
- 不能被实例化
- 可以将抽象类和接口类型作为引用类型
- 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要
被声明为抽象类