接口和抽象类的异同

接口和抽象类的异同

相同点:

  • 二者都不能实例化

  • 都是引用类型

  • 都可以包含抽象方法

  • 都是用来定义规则的

     

区别抽象类接口
多继承 子类只能继承一个抽象类(继承关系是单继承) 子类可以实现多个接口(接口与接口之间可以进行多继承)
成员 抽象类中可以有实例成员、类成员、抽象方法 接口中只能有抽象方法和常量,在JDK8.0之后可以有Static和default方法
实现 子类使用extends继承抽象类 子类使用implements实现接口
成员变量修饰符 抽象类中既可以定义常量也可以定义变量 接口中只能定义常量(使用public static final修饰)
子类实现 子类在实现抽象方法时不允许缩小访问权限 子类在实现接口中的抽象放大时必须指定为public
构造方法 抽象类中可以有构造方法 接口中不能定义构造方法
最高层 类的最高层是Object 接口没有最高层

抽象类:使用static修饰的类

抽象类不一定有抽象方法,有抽象方法的一定是抽象类

抽象类不能被实例化的原因:

应为抽象类中有抽象方法,抽象方法没有方法体,抽象类不是完整的类,因此不能实例化。

static 和final不能一起使用。

子类必须实现抽象类中所有的抽象方法,否则子类就要定义为抽象类

面向对象的设计原则

  • 摘取代码中变化的行为,形成接口

  • 多用组合,少用继承

  • 针对接口编程,不依赖于具体实现

  • 针对扩展开放,针对修改关闭

原文地址:https://www.cnblogs.com/juddy/p/12859701.html