抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。
- 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
- 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
- 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
自己的理解:
抽象类的特性:一、抽象类可以继承一个类实现多个接口。
二、子类继承抽象类的时候,子类须实现抽象类中的抽象方法,如果不实现,则子类也变为抽象类。
三、抽象类不能被实例化,抽象类可以有非抽象方法。
四、一个类如果有抽象方法,则这个类一定是抽象类。当然抽象类也可以没有抽象方法!
接口的特性:一、接口不可以被实例化(匿名内部类中实例化的是实现接口的类)
二、实现类必须实现接口中的所有的方法
三、实现类可以实现多个接口
四、接口中的常量都是静态常量
联系:接口是特殊的抽象类。