接口和抽象类的区别

面试过程中经常会被问道Java中接口和抽象类有什么区别,下面记了一些代码层面的差异。

  1. 接口最主要的不同是,接口默认是抽象的,本身不能有任何实现。抽象类可以有为子类提供的默认实例方法。 Note: Java8 开始接口也可有默认实现了

  2. 接口中的变量默认是final的。抽象类可以包含非final的变量。

  3. 接口的成员默认是public的。抽象类可以有任意类型的成员,private,protected都可以。

  4. 实现接口需要用implements关键字。继承抽象类用extends关键字。

  5. 接口继承一个或者多个接口,但是不能继承或实现任意抽象抑或者实体类。抽象类可以继承另外一个Java类同时还可以实现多个Java接口。这一有些关于为什么java类不支持多继承

  6. 一个Java类可以实现多个接口,但是只能继承一个抽象类。

  7. 接口是完全抽象的,不能够实例化。抽象类也是不能被实例化的,但是如果其中有main()方法时,还是可以调用。

  8. 和抽象类相比,接口定义的引用在具体执行时由于需要做额外的间接寻址工作因此会慢些。(执行时需要通过搜索具体类的实现方法)

秦风汉雨

秦风汉雨

My name is YouLi. I’m a software enginer at Amazon and an explorer of the world.