1. 抽象类:
顾名思义就是很抽象,很难想象的(它是一个什么样的、怎么实现的)类
定义:Java中在类中定义方法,但是却没有方法的具体实现
应用场景:当多个子类都有相同的方法,但是方法的实现各不相同,这时候可以抽取一个父类出来,而父类中定义了方法 的声明(抽象方法),却没有方法的实现
总的来说就是 抽取多个类的公共部分 时会用到抽象类
2. 接口:
现实中的接口 就是厂家定制的规则,你如果不遵守则无法连接厂家的设备。
在Java中接口就是用interface修饰的 "类"(编译后仍然会产生.class文件),该特殊"类"中定义一些抽象方法(就如现实中厂商定制的规则一样)。
接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成
可以认为接口是一个独立、特别的抽象方法集合
作用(好处):功能的定义和实现分离.2.定义了规范,方便扩展
二者的选用:
优先选用接口,尽量少用抽象类;
需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;
特点:
变量: 接口中可以定义变量,但是变量必须有固定的修饰符public static final修饰,这里变量就是常量了
方法: 方法必须固定的修饰符public abstract修饰
实现和继承:一个接口可以继承多个接口,一个类可以实现多个接口
总结接口和抽象类的区别:
相同点:
1.位于继承的顶端,用于被其他类实现或继承;
2.不能直接实例化对象;
3.包含抽象方法,其子类都必须覆写这些抽象方法;
区别:
1.抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性; 接口只能包含抽象方法;
2.一个类只能继承一个直接父类(可以是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
3.抽象类为继承体系中的共性内容,接口为继承体系中的扩展功能