如果一个类包含抽象方法,那么这个类就是抽象类。在JAVA语言中,可以通过abstract把类中的某些方法声明为抽象方法来表示一个类是抽象类。接口就是一个方法的集合,接口当中所有的方法都没有方法体。在java语言中接口是通过interface来声明的。
抽象类和接口都是支持抽象类定义的两种机制前者表示一个实体,后者表示一个概念。
只要是包含一个抽象方法的类就必须被声明为抽象类。抽象类可以声明方法的存在而不去实现它,被声明为抽象的方法不能包含方法实体。被实现时候必须包含更低的访问级别。抽象类在使用的过程中不能被实例化,但是可以声明对象使他具体指向一个子类实例。抽象类的子类为父类中所有的抽象方法提供具体的实现,否则它也是抽象类。接口可以被看成是抽象类的变体。接口中所有的方法都是抽象的可以通过接口实现多次继承。接口中所有的成员变量都是static final形。由于抽象类可以包含部分方法的具体实现,所以在一些场合抽象类更加有优势。
接口和抽象类的相同点如下:
1. 都不能被实例化
2. 接口的实现类或者抽象类的子类实现类都只有实现了抽象方法后才能被实例化。
不同点如下:
1. 接口只有定义,其方法不能在接口中实现。只有实现接口的类,才能实现定义在接口中的方法。而抽象类可以有定义和实现,其方法可以在抽象类中被实现。
2. 接口需要实现,抽象类只能被继承,一个类可以实现多个接口,但是不能继承多个抽象类。
3. 接口强调特定的功能实现,而抽象类强调所属关系。
4. 接口中的成员变量默认是 public static final,只能有静态的不能被修改的静态成员变量。而且必须赋予初始值。
而抽象类 可以有自己的成员变量。
此外 接口可以继承接口。抽象类可以实现接口。抽象类可以继承具体的类,抽象类可以有main 方法。