抽象类,抽象方法,接口的总结
抽象方法 | 抽象类 | 接口 |
---|---|---|
抽象方法没有方法体,交给子类实现 | 抽象类不一定有静态方法,有静态方法的一定是抽象类。 | JDK1.8之前:接口里只能写方法的声明,而不能写方法的具体实现 JDK1.8之后:接口可以对方法的声明写具体实现。 |
抽象方法修饰符 不能是private,final,static(因为需要子类实现)。 | 不能被实例化,只能被继承。 | 接口中没有构造方法,不能被实例化。 |
抽象方法必须定义在抽象类或接口中。 | 抽象类的子类可以不实现所有的抽象方法,但也必须作为抽象类。(抽象派生类) | 接口只能继承接口,不能继承类,接口支持多继承。 |
无 | 抽象类的构造器不能定义为私有。(子类构造方法会调用父类构造方法。) | 接口中定义的成员变量默认是public static final修饰的静态常量 |
无 | 抽象类不能定义为final,final (修饰的类不能被继承)。 | 接口中的方法: 默认是public abstract 修饰的抽象方法。 JDK1.8前不能有静态方法,不能有普通方法。 JDK1.8后可以有静态方法,可以有普通方法。 |
无 | 抽象类可以实现接口,可以继承具体类,也可以继承抽象类。 | 接口中定义的内部类,默认是public static 修饰的静态内部类。 |
无 | 抽象类中有普通方法,也可以有静态方法。 | 无 |
抽象类和接口的异同:
相同点 | 不同点 |
---|---|
① 抽象类和接口都不能被实例化 | ① 抽象类有构造方法,接口没有构造方法 |
② 抽象类和接口都可以定义抽象方法,子类/实现类必须覆写这些抽象方法 | ② 抽象类可以包含普通方法,接口中只能是public abstract修饰抽象方法(Java8之后可以) |
无 | ③ 抽象类只能单继承,接口可以多继承 |
无 | ④ 抽象类可以定义各种类型的成员变量,接口中只能是public static final修饰的静态常量 |
无 | ⑤抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。 |
无 | ⑥抽象类中可以包含静态方法,接口中不能包含静态方法。 |
感谢某位不知名博主的总结,在本博客中借鉴了很多对方的总结知识点:传送门