抽象类 | 接口 | |
---|---|---|
默认的方法实现 | 可以有默认的方法实现 | jdk1.8之前不能有默认方法实现,jdk1.8开始支持用default进行默认方法的实现,这个默认实现方法并不强迫实现类去实现 |
实现 | 子类使用extends关键字来继承抽象类,如果子类不是抽象类的话,那么子类要实现抽象类中的所有声明的方法 | 子类通过implements来实现接口,子类需要实现接口中所有声明的方法 |
构造器 | 可以有 | 不可以有 |
与正常java类的区别 | 除了不能实例化抽象类外,和普通java类没什么区别 | 接口是完全不同的类型 |
main方法 | 可以有main方法,并且可以运行 | 不可以有main方法 |
多继承 | 可以继承一个类和实现多个接口 | 只可以“继承”一个或多个其他接口 |
默认修饰符 | 参考下边默认访问权限 | 方法:public abstract ; 属性:public static final |
默认访问权限 | JDK 1.8以前,抽象类的方法默认访问权限为protected(可以是public和protected),JDK 1.8时,抽象类的方法默认访问权限变为default(可以是public和protected或者不写) | JDK 1.8以前,接口中的方法默认,也必须是public的(只能用public),JDK 1.8时,接口中的方法默认public的,也可以是default的(可以是public和default),JDK 1.9时,接口中的方法可以是private的(可以是public和default和private) |