接口和抽象类

2018-07-30  本文已影响0人  kindol

共同点:

  1. 都是上层的抽象层
  2. 都不能被实例化

不同:

  1. 抽象类可以实现方法,接口不行(除了default关键字的方法)

  2. 一个类只能继承一个父类,接口可以实现多个
    java语言中类的继承是单继承的原因:解决C++多继承带来的问题,使得程序更加安全

    而接口却可以多继承,因为接口中只有抽象方法,没有静态方法和非常量的属性,只有接口的实现类才会重写接口中方法。因此一个类有多个接口也不会增加JVM的绑定机制和复杂度。

    对于已经存在的继承树,可以方便的从类中抽象出新的接口,但是从类中抽象出新的抽象类就不那么容易了,因此接口更有利于软件系统的维护和重构。

  3. 接口和抽象类的设计目的不一样。接口是对动作的抽象,而抽象类是对根源的抽象。举个例子:人可以走和跳,如果是抽象类,那就包含两个方法,而接口可以将这两个方法独立开来,更加有利于解耦合。从这个意义算起来,接口的抽象程度高于抽象类

  4. Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。

  5. Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。

上一篇下一篇

猜你喜欢

热点阅读