抽象类与接口有什么异同?
什么是抽象类呢?
如果一个类中包含了抽象方法,那么这个类就是抽象类。可通过类或者方法中是否有abstract来判断,(abstain只能修饰类或者方法,不能修饰属性)。
那什么是接口呢?
接口是指一个方法的集合,接口中的所有方法都没有方法体,在java中接口是通过interface关键字来实现的。
**
## 注意事项
**
- 抽象类在使用过程中不能被实例化,但是可以创建一个对象,使其具体的子类实例。
- 抽象类的子类要对父类对抽象方法进行实现,否则它们也是抽象类。
- 接口可以看做是抽象类的变体。
- 只要有一个抽象方法就必须声明抽象类。
- 接口中的成员变量都是 static final类型。
接口与抽象类的相同点
- 被实例化。
- 接口的实现类或者抽象类的子类都是实现了接口或者抽象类中的方法后才能被实例化。
接口与抽象类的不同点
- 接口只有定义,方法不能在接口中实现,只有实现接口类才能实现接口中定义的方法,而抽象类可以定义与实现,方法也是可以在抽象类中被实现。
- 接口需要关键字implement来实现,但是抽象类只能被继承(用extend)。一个类可以实现多个接口,但是一个类只能继承一个抽象类,因此实现多个接口间接的达到多重继承。
- 接口强调特定功能的实现,设计理念是 has -a 关系,而抽象类强调is -a。
- 接口中定义的成员变量默认public static final 。必须赋值,抽象类中可以定义自己的数据成员变量,也可以有非抽象的成员方法。这些成员变量可以在子类重新新定义,也可以重新赋值。
- 接口运用比较常用,便于日后的维护 或者添加删除。而抽象类更倾向于充当公共的角色,不适合日后的对里面代码的修改。