抽象类(abstract)和接口(interface)的异同点

接口是抽象类的延伸,是抽象类的特殊化

相同点:

  都可以写抽象方法,规定了子类必须要重写的方法(所以不能有抽象构造方法和抽象静态方法);

      为什么不能有抽象构造方法:构造方法是类实例化时的构造过程,而抽象类不能被实例化,两者矛盾,所以不存在抽象构造方法。

      为什么不能有抽象静态方法:抽象方法是专用于继承来实现的,而静态方法可以被类及其对象调用,不能被继承,两者矛盾,所以不存在抽象静态方法。

  都不能被实例化,所以不能创建实例对象(由于没有对应的具体概念);【可以用new 接口(){}的方法来当做匿名类,把方法作为参数来进行传递,注:这不是实例化

不同点(语法):

  抽象类是对类抽象,而接口是对行为抽象;

  抽象类只能继承一个,而接口可以实现多个;

  抽象类中可以有非抽象方法,而接口中只能有抽象方法(JDK1.8开始,接口中可以通过default关键字来定义非抽象方法,解决扩展问题);

  抽象类中可以有成员变量和属性,而接口中只能有由static final修饰的常量;

  抽象类有构造方法(为子类准备),而接口没有构造方法;

不同点(应用):

  抽象类在代码实现方面发挥作用,可以实现代码的重用;而接口更多的是在系统架构方面发挥作用,主要用于定义模块之间的通信契约。

猜你喜欢

转载自www.cnblogs.com/hong-yu0415/p/9108717.html