接口和抽象类的异同

相同点:

  • 均可定义抽象方法

不同点:

  • 抽象类中可以有抽象方法用abstract修饰, 不可用private. 也可以有非抽象的方法
  • 接口类中所有的方法都只能是抽象方法(从Java8 开始, 接口类中的方法可以有默认实现, 用default关键字修饰)
  • 接口类中的属性都只能是final static.
    为什么接口类中的属性只能是final static?
    接口本来就是高度抽象的类, 其中定义的属性不应该被修改. 而且其中的属性是对于所有实现了该接口的类所共同所有, 一旦修改, 即对所有的类都修改. 没有任何意义. 而用static修饰是因为接口类无法实例化, 如果想要调用其属性, 只能通过类来调用, 所以要加上static.
  • 由于抽象方法一般用public, protected, default来修饰, 不可用private修饰. 因为抽象方法本来就是为了被重写, 如果用private修饰的话, 就无法进行重写了

注: 当一个类同时实现了两个接口时, 并且两个接口中有同名的默认实现方法, 则该类需要重写该默认方法.

你可能感兴趣的:(接口和抽象类的异同)