java中的抽象类和接口从概念上有很多相似之处,但是所起的作用还是大有不同。
定义
抽象类:包含至少一个abstract关键字定义的方法,编译器强制要求类定义为abstract class,且默认public的。
接口:看起来是比abstract类更高层次的抽象,所有方法都没有方法体,默认都为public,而且不能改变。
区别
抽象类是对子类共同特性的抽象,可以提供某些方法的默认实现。而接口是抽象方法的集合,如果某个子类实现了该接口,那么该子类就要保证实现该接口中所有的抽象方法,这就像一种契约合同。接口只是一种模式,其本身并不能做任何事情。另外,接口可以实现多重继承特性,而java不支持类的多重继承。
使用场景
- 如果需要实现多重继承,选择接口;如果要创建不带任何方法和成员变量的基类,那么使用接口。
- 如果需要基类有默认的方法实现,或者基本功能需要经常改变,那么使用抽象类。