抽象类与接口相同点:
1.都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承.
2.都可以包含抽象方法,并且实现接口和继承抽象类的方法都必须实现这些抽象方法
抽象类与接口的区别:
1.变量
抽象类中既可以定义普通成员变量,也可以定义静态常量
接口中只能定义静态常量,不能定义普通成员变量.
接口中变量static:因为一个类可以实现多个接口,如果一个类同时实现了多个接口而每个接口中都定义了同一个变量的话就会产生在类中不知道是哪个接口
中的变量了,所以必须定义成static的,每个接口拥有各自的这个变量。
接口中变量final:因为一个接口可以被多个类实现,如果不定义成final的话每个实现了该接口的类都去改变这个变量就会产生错误,所以必须定义成final。
2.方法:
抽象类中既可以有抽象方法,也可以有非抽象方法,静态方法
接口中有抽象方法,default方法(在Java8中才开始有),静态方法(在Java8中才开始有)
3.构造器:
抽象类中可以有构造器,接口中不能有构造器
4.初始化块:
抽象类中可以有初始化块
接口中不能有初始化块
5.继承实现:
一个类最多只能继承一个抽象类,并且要实现其全部抽象方法
一个类可以实现多个接口,并且要实现其全部抽象方法