开发javaweb的同学肯定是经常与接口打交道,如我们定义dao层,定义service层,都会使用接口的形式。
接口是由谁演变而来的,就是抽象类,接口是一种特殊形式的抽象类,使用接口完全有可能实现与抽象类相同的操作。
相同点:
- 都不能被实例化;
- 接口的实现类或者抽象类的子类都必须实现了接口或抽象类中的方法后才可以被实例化;
- 可以定义抽象类和接口类的引用。
不同点:
- 接口只有定义,方法不能在接口中实现,实现接口的类要实现接口中所有的方法;抽象类可以有定义与实现,方法可以在抽象类中实现;
- 接口中定义变量默认为public static final,且要赋初值,方法必须是public,static,且只能是这两个;
- 抽象类中可以有自己的数据成员变量,也可以有非抽象的成员方法,而且成员变量默认为default。这些成员变量可以在子类中被重新定义,也可以重新赋值,抽象方法(有abstract修饰)不能用peivate,static,synchronized,native等访问修饰符修饰,同时方法以分号结尾,并且不带花括号。
总结:
- 接口被运用于比较常用的功能,便于日后的维护或者添加删除方法;而抽象类更倾向于充当公共类的角色,不适用于对里面的代码进行修改;当子类和父类之间存在有逻辑上的层次结构时,推荐使用抽象类;
- 当用于不同类之间,定义不同类之间的通信规则,希望支持差别较大的两个或者更多对象之间的特定交互行为时,应该使用接口;
- 知己知彼百战百胜,我们只有足够的了解它,才能更好的运用它。说了这么多就是希望看见这篇文章的伙伴,记住这些特点,无论你是在面试中还是实际开发中,都能给你提供个参考。