接口和抽象类的区别
面试回来自己总结了一些问题,发现好多知识点自己是知道的。但是并没有说出来、回答的很凌乱。这复盘一下一个自己雪崩的问题。
对于这个问题我当时的回答是,接口是行为的抽象。一种系行为规范。更多的是用在系统架构方向。而抽象类是从设计层面来说的,主要应用于代码实现。再往下的但是就没说。
比较全面的回答应该从概念到使用一层一层来分析
从设计层面来说,抽象是对类的抽象,是一种模板设计,主要应用于代码实现。接口是行为的抽象,是一种行为的规范.用在系统架构方向。
接口不能用new实例化,但可以声明、但是必须引用一个实现该接口的对象。
接口的默认方法是public、所有方法在接口中不能实现。(Java8开始接口方法可以有默认实现),抽象类可以有非抽象方法。
接口中的是实例变量默认是final类型的,而抽象类中则不一定
一个类可以实现多个接口,但只能实现一个抽象类
一个接口的实现要实现接口的所有方法,而抽象类不一定
注:在JDK1.8中,接口也可以定义静态方法,可以直接用接口名调用。实现类的实现是不可调用的。如果同时实现了两个接口,接口中定义了一样的默认方法,必须重写,不然会报错。