18. interface与abstract类的区别

2016/9/29 15:11 下午 posted in  Java comments

interface中不能有变量,只能有公有静态常量,没有构造方法,默认为public abstract,一个类可实现多个interface,表示has-a关系,实现一个接口必须实现其中所以的方法。

抽象类中可以有自己的变量,可以有私有方法和非抽象方法,需要继承,一个类只继承一个,继承类如果不是抽象类必须实现抽象方法,如果是则不需要被重写。is-a关系。

接口和抽象类的相同点:
1.都不能被实例化
2.接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化。

不同:
1.接口中的方法只能有定义。抽象类中可以有定义和实现。
2.接口可以实现(implement)多个,但是继承抽象类只能继承一个
3.接口中不能有变量只能包含public static final常量。所有方法默认为public abstract。抽象类中可以有普通成员变量和成员方法。
4.接口用于实现常用功能,便于日后维护或者添加删除方法;抽象类则充当公共类的角色,不适用于日后重新对代码进行修改。