抽象类:

是用来捕捉子类的通用特性的,至少包含一个抽象方法,该抽象方法必须在子类中实现,由于抽象类没有抽象方法的具体实现,因此不能对抽象类进行实例化。

接口:

定义了一组方法,是抽象方法的集合,但是接口都没有方法的实现,也就是说这些方法都是抽象方法。

参数 抽象类 接口
默认的方法实现 它可以有默认的方法实现 接口是完全抽象的,它根本不存在方法的实现
实现 extends 子类需要重写抽象类中的所有抽象方法 implements   子类需要实现接口中的所有方法
构造器 可以有 没有
与正常java类的区别 除了不能实例化抽象类之外,和普通Java类没有任何区别 接口是完全不同的类型
访问修饰符 public protected defalut 只能是public
main方法 可以有并运行 没有
多继承 可以继承一个类和实现多个接口 只可以继承一个或多个其他接口
速度 比接口快 它需要时间来寻找在类中实现的方法
添加新方法 可以提供默认的实现,不需要改变现在的代码 必须改变实现该接口的类

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

  • 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
  • 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

最新文章

  1. Android之RecyclerView的原生Bug-Inconsistency detected. Invalid view holder adapter positionViewHolder{a1bbfa3 position=2 id=-1, oldPos=-1, pLpos:-1 no parent}
  2. js form 表达关于onpress 的一个问题
  3. go http.Get请求 http.Post请求 http.PostForm请求 Client 超时设置
  4. scalatest的userguide
  5. html input的file文件输入框onchange事件触发一次失效解决方法
  6. 《锋利的jQruery》读书笔记
  7. 更改ubuntu mysql data目录位置
  8. oracle job interval·相关事例
  9. JS 页面加载触发事件 document.ready和onload的区别(转)
  10. 恶意软件"跨平台" 小心钱包很受伤
  11. javascript call和apply
  12. qt 汉化 国际化
  13. md5加密解析
  14. js常用的数组方法
  15. linux环境给mongodb创建索引
  16. 2D游戏与3D游戏的区别 原文:https://zhidao.baidu.com/question/588490865.html
  17. 6)django-示例(fbv)
  18. web socket RFC6455 frame 打包、解包
  19. JavaScript使用localStorage缓存Js和css文件
  20. 一个简单的 openssl 示例

热门文章

  1. Oracle EXPDP and IMPDP
  2. laravel扩展包服务提供者的注册的两种方式
  3. 关于Error:Maven Resources Compiler: Maven project configuration required for module '项目名' isn't available. Compilation of Maven projects is supported only&
  4. python数组中数据位置交换 -- IndexError: list assignment index out of range
  5. 数的计数(noip2001,动态规划递推)
  6. HUST软件与微电子学院第八届程序设计竞赛-小乐乐下象棋
  7. MariaDB数据库(一)
  8. day23 01 类的命名空间
  9. python对象销毁(垃圾回收)
  10. MySQL存储过程中一直困扰的 の 变量中的@