Java接口和抽象类很像,他们有哪些相同点和异同点呢,下面我们做一个小结
相同
① 都不能被实例化,都位于继承树的顶端,用于被实现或者继承
② 都可以包含抽象方法,实现接口或者继承抽象类的普通子类都必须实现这些接口
差别
① 接口可以规范调用者可以调用哪些服务(对外),已经如何调用这些服务(方法签名)
② 接口是多个模块之间的耦合标准,当在多个应用程序之间使用接口,接口是应用程序之间的通信标准
③ 抽象类则不同,作为多个子类的共同父类,体现的是一种模板式设计,可以当成是系统实现过程中的中间产品
④ 这个中间产品实现了系统的部分功能,但是这个产品依然不能成为最终产品,必须有进一步的完善。
⑤ 接口只能包含方法签名,不能提供实现,抽象类则完全可以实现普通方法
⑥ 接口里不能定义静态方法,而抽象类可以定义静态方法
⑦ 接口里可以定义静态常量Field,但是不能定义普通Field;抽象类则可以定义普通Field和静态常量Field
⑧ 接口里不包含构造器,抽象类则完全可以包含构造器;抽象类的构造器并不是完全用于创建对象,而是让子类去调用指定构造器完成属于自己的初始化方法
⑨ 接口里不能包含初始化块;但抽象类则完全可以包含初始化块
⑩ 一个类可以实现多个接口,但是只能继承一个父类