龙空技术网

Java8接口也能写实现方法后,抽象类是不是就要退出舞台了?

陕西文都智链 114

前言:

当前兄弟们对“java抽象方法可以不实现吗”大体比较看重,看官们都需要分析一些“java抽象方法可以不实现吗”的相关文章。那么小编同时在网络上网罗了一些关于“java抽象方法可以不实现吗””的相关文章,希望咱们能喜欢,小伙伴们一起来学习一下吧!

我们面试时经常能听到一个问题,抽象类和接口如何区分?我听到大部分的人都在说:接口中的方法是抽象的,抽象类中的方法除了抽象还可以写实现方法。是,以前这是一个很优秀的答案,但是现在,再这样回答,基本就out了。

我们都知道,Java8在接口中推出了默认方法、静态方法,打破了接口仅仅写抽象方法的传统。这个时候就困惑了,既然接口都能写默认方法了, 那么还要抽象类就没有存在的必要了。但是真的是这样吗?不是的。我们来讨论一下抽象类和接口的区别。

区别一:概念和场景

抽象类是一个类,而接口是一个接口,两者的本质是有根本区别的,应用场景也不一样。

区别二:接口不能写构造方法

Java8中接口也可以写实现方法,但是构造方法却并不能写, 构造方法还是通过抽象类来写,这从本质上区分了接口和抽象类,这意味着抽象类是参与类的实例化过程的,但接口并不是。

区别三:抽象类有各自的成员变量

抽象类可以通过非抽象的方法改变自己的成员变量,灵活度较高。接口中的变量几乎都是 public static final修饰过的常量,这意味着无法被改变。

区别四:继承不同

接口多继承,抽象类单继承

通过例子来看会明显许多:

public class HashMap<K,V> extends AbstractMap<K,V>     implements Map<K,V>, Cloneable, Serializable {     ... }     
public interface Connection  extends Wrapper, AutoCloseable { ... } 

类与类单继承,接口与接口多继承,类与接口多继承。

总结部分

综上所述,Java8接口和类别的区别除了允许接口写实现方法之外并没有什么变化。但是从接口可以写实现方法这件事上可以看出,抽象类的存在似乎被弱化了许多,毕竟类无法多继承,耦合性也较差,接口更加灵活,不会增加耦合性。

虽然我们平时的开发中强调多用组合,尽量少用继承,但是无论如何必须用继承的场景还是存在的,再到我们常用的模板设计模式就是抽象类和各种模板的子类,所以说,接口也不能完全代替抽象类的。

标签: #java抽象方法可以不实现吗