抽象类与接口简单区别
抽象方法属于一种不完整的方法,只有一个声明,没有方法主体。
相同点:都是不断向上抽取而得到的,
不同点:
1.抽象类需要被继承,且为单继承;接口需要被实现,可以多继承(多重继承)。
2.抽象类中可以定义抽象方法和非抽象方法,子类继承后可以直接使用抽象方法;接口(不能有实例域即成员变量)中一般为抽象方法(public abstract)和全局常量(public static final),javaSE8后新增静态方法(public static一般为接口伴随使用工具,之前不允许有)和默认方法(default默认实现接口方法,可以被覆盖),接口中的抽象方法必须实现类实现。
3.抽象类的继承为is-a关系,定义该体系的共性内容;接口的实现为like-a关系,定义体系的额外功能。
4.关于接口和抽象类中有无构造方法的区别:
在接口中不允许有构造方法,构造方法一般用于初始化成员变量,但是在接口中不允许有成员变量;类能够实现多个接口,若多个接口都有自己的构造函数,会造成创建实例时出现调用的不确定性。
在抽象类中允许有自己的构造方法,只是不能直接构建,可以交给子类去使用(间接调用)。
心得:某类对象抽象出的共有的特性定义为抽象类,抽象出的特有特征(特征不止一个)定义为接口。共性与特性在生活中是存在并且常见的,而且相对于不同群体对象定义是不同的,要视具体应用群体对象具体分析哪些用抽象类,哪些用接口。
笔记本电脑使用描述:
为了扩展笔记本的功能,但日后出现什么功能并不知道?
所以为笔记本定义一个规则USB接口,即就java中的接口(接口变量传递),日后出现的设备只要符合这个规则即可。
规则(接口)定义是为了在某个外部设备(实现类)中实现(implements),例如在优盘中实现usb插口,所以这个插口(对象)会扔到笔记本USB接口上应用。
定义规则(接口),使用规则(接口实现类参数接收),实现规则(实现类)。