抽象类要被子类继承,接口要被类实现。
接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
接口是设计的结果,抽象类是重构的结果。
抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。
抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。
抽象类主要用来抽象类别,接口主要用来抽象功能。
抽象类:1、抽象类使用abstract修饰;2、抽象类不能实例化,即不能使用new关键字来实例化对象;3、含有抽象方法(使用abstract关键字修饰的方法)的类是抽象类,必须使用abstract关键字修饰;4、抽象类可以含有抽象方法,也可以不包含抽象方法,抽象类中可以有具体的方法;5、如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类,否则就是抽象类;6、抽象类中的抽象方法只有方法体,没有具体实现;
设计的目的上,二者的区别:
接口本质上是一种规范,对于实现者而言,规定了必须向外提供哪些服务,对于调用者来说规定了可以调用哪一部分功能。是多个程序之间通信的标准。抽象类是一种模板设计,是系统实现过程中的中间产品。
接口(can)、抽象类(is-a)
接口只能包含抽象方法,静态方法,默认方法和私有方法,不能为普通方法提供方法实现,抽象类包含普通方法。都不能被实例化。
接口中不能包含构造器和初始化块定义,只能定义静态变量。
一个类只能有一个直接父类包括抽象类,但是一个类可以实现多个接口,通过接口可以弥补Java单继承的不足。
通过对接口的使用可以很好的降低程序各模块之间的耦合,提高系统的可扩展性和可维护性。