CS3L27——抽象类和接口的区别

抽象类和接口相同点

  • 都可以被继承,都不能直接实例化
  • 都可以包含方法申明,子类必须实现未实现的方法
  • 都遵循里氏替换原则

抽象类和接口的不同点

  • 抽象类中可以有构造函数;接口不能
  • 抽象类只能被单一继承;接口可以继承多个
  • 抽象类可以有成员变量;接口不能
  • 抽象类中可以申明成员方法,虚方法,抽象方法,静态方法;接口只能申明没有实现的抽象方法
  • 抽象类可以使用访问修饰符;接口中建议不写,默认 public

如何选择抽象类和接口

  • 表示对象的用抽象类,表示行为拓展的用接口
  • 不同对象拥有的共同行为,我们往往可以使用接口来实现

例如:动物是一类对象,可以使用抽象类;而飞翔是一个行为,就可以选择接口