abstract class 和 interface 有什么区别?(据说是面试题)

定义

声明方法的存在而不去实现它的类被叫做抽象类(abstract class)

接口(interface)是一种约束形式,其中只包括成员定义,不包含成员实现的内容。

知识点

1.接口(interface)可以说成是抽象类的一种特例。接口中的所有方法都必须是抽象的,不能有非抽象的普通方法。抽象类中可以包含非抽象的普通方法。

2.接口中的方法定义默认为public abstract类型(公共抽象方法),接口中的成员变量类型默认为public static final(全局常量)。

3.抽象类和接口的区别:比喻为亲爹和干爹的区别,抽象类是亲爹,接口是干爹,一个实现类只能有一个亲爹,但是可以有多个干爹;(java8中,接口中的方法也可以有方法体)

两者对比

抽象类与接口的相同点 抽象类与接口的不同点
都是抽象类,且都不能实例化。 抽象类可以有构造方法,接口中不能有构造方法。
接口实现类以及抽象类的子类都必须要实现前者已经声明的抽象方法。 抽象类中可以有普通成员变量,接口中没有普通成员变量
null 一个类可以实现多个接口,但一个类只能继承一个抽象类(java单继承)
null 接口需要实现,用implements,抽象类需要继承,用extends。
null 接口里面不能有私有的方法或变量,抽象类是可以有私有方法或私有变量
null 接口属性默认是public static final的,接口方法默认是public abstract的

猜你喜欢

转载自blog.csdn.net/Mr_Qian_Ives/article/details/104264583