7. 抽象类和接口的比较
1、什么是抽象类? 就是对类更高的抽象。抽象类作为多个子类的共同父类。它所体现的是一种模版设计,抽象类作为多个子类的父类,可以把它理解为系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能,但是不能当成最终产品,还需要进一步的完善。
当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法【抽象方法】,用abstract来修饰该类【抽象类】。
1)、抽象类不能被实例化。
2)、用abstract关键字来修饰一个方法时,这个方法就是抽象方法,抽象方法不能有主体【即不能实现】;用abstract关键字来修饰一个类时,这个类就叫抽象类。
3)、抽象类不一定要包含abstract方法。也就是说抽象类可以没有abstract方法;但是一旦类包含了abstract方法,则这个类必须声明为abstract。
2、什么是接口? 接口是一种规范,就像现实中生产主板和内存条或者网卡的不是同一家产商,但是为何内存或者网卡插入到主板上就能用呢,因为他们都遵守了某种规范。然后就可以使用。虽然他们的内部实现可能完全不同。就好比在java语言中的方法内部实现你不需要关心,只需要知道这个接口是怎样的干嘛的就行了,直接用。既然是一种规范,那他在编程语言中就能在架构中起到非常之大的作用,在一个应用程序之间的时候,接口体现的是一耦合标准。特别是在多个应用程序需要对接的时候。接口是多个应用程序的通信标准。接口就是给出一些没有内容的方法,封装在一起,到某个类要使用的时候,再根据具体情况把这些方法写出来。
接口是更加抽象的抽象的类,抽象类里的方法(非抽象方法,抽象类可以有非抽象方法)可以有方法体,接口里的所有方法都没有方法体。接口体现了程序设计的多态和高内聚低偶和的设计思想。
1)、接口中的所有方法都不能有主体,不能被实例化。
2)、一个类可以实现多个接口。
3)、接口中可以有变量【但变量不能用private和protected修饰】。a、Java接口中的变量是公共的(public),静态的(static),最终的常量(final),相当于全局常量,所以定义接口变量时必须初始化。 b、接口中的变量,本质上都是static的,不管你加不加static修饰。c、在java开发中,我们经常用的变量,定义在接口中,作为全局变量使用。访问形式:接口名.变量名。
4)、一个接口不能继承其它的类,但是可以继承别的接口。
5)、接口没有方法就可以作为一个标志,比如可序列化的接口Serializable,没有方法的接口称为空接口。
7.1. 抽象类与接口的比较
接口和抽象类都不能实例化,他们都位于继承树的顶端,用于被其他类实现和继承。接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
他们的区别:
1、属性:接口没有普通属性