- 抽象类可以有构造方法,接口中不能有构造方法。(虽然抽象类有构造方法,但它也不能被实例化)
- 抽象类中可以有普通成员变量,接口中没有普通成员变量。
- 抽象类和接口中都可以包含静态成员变量。抽象类中的静态成员变量的访问类型可以是任意类型,但接口中定义的变量只能是public static final,并且默认为:public staic final类型。(接口毕竟要被子类实现,所以成员变量必须是public,如果是其他访问类型,那这个变量存在还有什么意义)
- 抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法。
- 抽象类中的抽象方法访问类型可以是public, protected和默认。但接口抽象方法只能是public类型的,且不管接口的方法是否使用public abstract修饰默认即为public abstract类型。(例如:在接口中定义void add();方法 是和public void add(); 、public abstract void add()等价的)
- 抽象类中可以包含静态方法,而接口中不能包含静态方法
- 一个类可以实现多个接口,但只能继承一个抽象类。
- abstract class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a"关系,即父类和派生类在概念本质上应该是相同的。对于interface来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的, 仅仅是实现了interface定义的契约而已。
面试题之——抽象类(abstract class)与接口(interface)的区别
最新推荐文章于 2021-06-22 19:46:42 发布