抽象类与接口的区别

Posted dxj1016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类与接口的区别相关的知识,希望对你有一定的参考价值。

抽象类

特点:

  1. 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
  2. 抽象类可以有普通成员变量和方法,也可以有静态成员变量和方法还有常量。
  3. 抽象类中可以有构造方法
  4. 抽象类不能有default的默认普通方法
  5. 抽象类可以有public,默认,protected修饰的抽象方法,没有private修饰的抽象方法
  6. 不能直接实例化,但是,如果它包含 main 方法的话是可以被调用的。
  7. 抽象类除了不能实例化对象之外,类的其它功能依然存在。
  8. 抽象类中不一定包含抽象方法,但是有抽象方法(只是声明,不包含方法体)的类必定是抽象类。
  9. 一个类只能继承一个抽象类
  10. 抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。

抽象类:
在这里插入图片描述

接口

  1. 接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合。
  2. 接口中只有常量,不能有普通成员变量和方法,也不能有静态成员变量和方法。
  3. 接口中没有构造方法,
  4. 接口中可以有default的默认普通方法(java8中有的,java8之前没有
  5. 接口中只能有public修饰的抽象方法,默认是public(java8有了default
  6. 不能实例化接口的对象(java 8 已支持在接口中实现默认的方法)
  7. 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。
  8. 在接口中的所有方法必须都是抽象的,不能有非抽象的普通方法(java8后有了),即是只有方法的声明,没有方法体。
  9. 一个类可以实现多个接口
  10. 类如果要实现一个接口,它必须要实现接口声明的所有方法。

接口:
在这里插入图片描述

总结

比较两者语法细节区别的条理是:先从一个类中的构造方法、普通成员变量和方法(包括抽象方法),静态变量和方法,继承性等6个方面逐一去比较回答,接着从第三者继承的角度的回答。
特别注意java7和java8中接口和抽象类的变化

  1. 抽象类中可以有普通成员变量和方法,也可以有静态成员变量和方法还有常量。接口中只能有常量
  2. 抽象类中可以有构造方法,接口中不可以有构造方法
  3. 抽象类不能有default的默认普通方法,接口中有default的默认普通方法(这是java8中新增的特性
  4. 抽象类可以有public,默认,protected修饰的抽象方法,没有private修饰的抽象方法。接口中只有public修饰,默认的时候是使用了public修饰符。
  5. 抽象类不能直接实例化,但是,如果它包含 main 方法的话是可以被调用的。接口中不能直接实例化,但是java8中有了default修饰的普通方法
  6. 抽象类除了不能实例化对象之外,类的其它功能依然存在。接口不是类,编写接口的方式和类,但是是两个不同的概念
  7. 抽象类中不一定包含抽象方法,但是有抽象方法(只是声明,不包含方法体)的类必定是抽象类。接口中的方法都是抽象方法(除了java8中出现的default方法)
  8. 一个类只能继承一个抽象类,一个类可以实现多个接口
  9. 抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。类如果要实现一个接口,它必须要实现接口声明的所有方法。

以上是关于抽象类与接口的区别的主要内容,如果未能解决你的问题,请参考以下文章

抽象类与接口的区别

抽象类与接口的区别

java抽象类与接口 中 相同方法的调用

抽象类与接口的区别

PHP中抽象类与接口的区别

Java抽象类与接口的区别: