抽象类和接口的区别

  • 抽象类在被继承时体现的是is-a关系,接口在被实现的时候体现的是can-do关系。
    抽象类体现的是对同类事物相对具体的抽象,is-a需要符合里氏替换原则,比如Eeagle is a bird,Bird is a Object。can-do要符合接口隔离原则,实现类要有能力去实现和执行接口中的行为,比如Plane can fly,bird can fly。这个fly就应该是一个接口,而不是放到抽象类让别人继承,因为除了fly这个行为,Bird和Plane没有什么共同特点。
  • 关键字不同:abstract和interface
  • 子类继承/实现:extends/implements
  • 方法实现:抽象类可以有,interface在java8之后可以有default实现,不然扩展的起来太难维护。
  • 访问控制符号:interface的方法默认public abstract,interface的属性默认public static final
  • 接口不能有静态方法和静态代码块

最后,定义类的过程就是抽象和封装的过程,而接口与抽象类是对实体类进行更高层次的抽象。

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