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

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

相同点:

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

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

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

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

不同点(语法):

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

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

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

  抽象类中可以有非抽象方法,而接口中只能有抽象方法,并且只能是public类型的,默认为 public abstract 类型(JDK1.8开始,接口中可以通过default关键字来定义非抽象方法,解决扩展问题);

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

  抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以是任意类型,但接口中定义的变量只能是 public static final 类型,并且默认为 public static final 类型。

不同点(应用):

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

 

这道题的思路是先从整体解释抽象类与接口的概念,然后答比较两者的相同点,接下来答语法方面的区别,最后答应用方面的区别。

比较两者语法区别的条理是:先从本质区别开始,然后是继承性,构造方法,抽象方法,成员变量和属性以及常量,最后是静态成员变量。

 

若有错误之处,欢迎指正。谢谢!

 

posted @ 2018-05-30 00:14  hong_Yu  阅读(2003)  评论(0编辑  收藏  举报