抽象类与接口的区别
抽象类 | 接口 |
---|---|
子类使用extends关键字来继承抽象类(单继承)。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现 | 子类使用关键字implements来实现接口(可实现多个),它需要提供接口中所有声明的方法的实现 |
抽象方法可以有public、protected和default这些修饰符 | 接口方法默认修饰符是public abstract,你不可以使用其它修饰符。 |
除了你不能实例化抽象类之外,它和普通Java类没有任何区别 | public static final修饰变量 |
可定义构造方法,可以有抽象方法和具体方法 | 接口完全是抽象的,没构造方法,且方法都是抽象的,不存在方法的实现(因为接口的成员变量都是static final变量,是在编译的时候就完成了初始化操作了,) |
不能实例化(new) | 不能实例化(new) |
含有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法 |
注意:在java 8以后, 对接口做了新的修改,允许接口有默认方法default,即可以为接口添加实现方法,这样实现接口的类就不需要做任何的改动就能继承该接口所实现的该默认方法了;这样就使得接口与抽象类更相似了(因为抽象类不仅存在抽象方法,而且还可以有具体的已经实现了的方法)。
推荐博文1
推荐博文2