Java抽象类和接口的区别

2018/09/26 14:45
阅读数 131

很多常见的面试题都会出诸如抽象类和接口有什么区别、什么情况下使用抽象类、什么情况下使用接口的问题。在讨论它们的不同点之前,不如先看它们的特性。

抽象类

抽象类是用来捕捉子类的通用特性的。它不能被实例化,只能用作子类的超类。抽象类是被用来创建继承层级里子类的模板

接口

接口是抽象方法的集合。如果一个类实现了某个接口,那它就继承了这个接口的抽象方法。这就是契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。

接口和抽象类的对比

参数 抽象类 接口
默认的方法实现 可以有默认的方法实现 接口是完全抽象的,根本不存在方法的实现
实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 子类使用implements来实现接口。需要提供接口中所有声明的方法的实现
构造器 抽象类可以有构造器 接口不能有构造器
与Java类对比 除了不能实例化之外,无其他区别 接口是完全不同的类型
访问修饰符 public、protected、default public
main方法 可以有main方法并且可以运行它 接口没有main方法
多继承 抽象类能继承一个类和实现多个接口 接口只能继承一个或多个接口
速度 比接口速度快 接口稍微有点慢,它需要时间去寻找在类中的实现方法
添加新方法 如果你往抽象类中添加新方法,你可以直接提供默认的实现。因此你不需要修改你现在的代码 如果你往接口中添加新方法,那么你必须改变实现该接口的类。

什么时候使用接口和抽象类?

  • 需要有默认的方法实现时,用抽象类。
  • 需要实现多继承时,只能用接口。
  • 参照表格最后一条,接口在增加新方法时需要修改所有实现接口的类。
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部