概念和使用上区别
首先,从概念上来说,接口是对动作的抽象,它定义了某些方法,但不提供实现。抽象类(abstract修饰的类)是对根源的抽象,它提供了一些方法的具体实现,同时也可以定义抽象方法。接口关注的是一个类能做什么,而抽象类关注的是这个类是什么。抽象类是对象的抽象,接口是一种行为规范。
其次,从使用上来说,接口和抽象类都不能被实例化,它们都是用于被其他类实现或继承的。抽象类表示该类中可能已经有一些方法的具体定义,但是接口就仅仅只能定义方法的方法名,参数列表,返回类型,并不关心具体细节,只是一个方法体。一个类只能继承一个抽象类,却可以实现多个接口。接口可以被视为抽象类的变体,其中所有的方法都是抽象的。而抽象类可以包含普通方法,也可以包含抽象方法,它提供了更多的灵活性,但也带来了更高的定义代价。
此外,接口和抽象类在定义方法、属性、构造器和初始化块等方面也存在一些区别。接口中只能定义抽象方法和静态常量属性,不能定义普通属性和方法。而抽象类则可以定义普通方法、普通属性和静态常量属性,还可以包含构造器和初始化块。这些差异使得接口和抽象类在使用场景和功能上有所不同。
抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量