接口.txt 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. Java的单继承机制具有一定的局限性。
  2. 不能同时继承多个父类,导致子类实现的功能单一。
  3. 所以为了弥补这块的不足,Java提出了接口的概念:
  4. 接口
  5. 接口是多个功能(抽象方法)的集合。
  6. 接口存在的目的就是让子类继承,并重新里面的抽象方法
  7. 接口是一种比抽象类还要抽象的类。
  8. 接口里没有任何的普通方法,接口里的所有方法必须都是抽象方法。
  9. 接口里的方法默认就是抽象的,就是使用:
  10. public abstract修饰的
  11. 接口就是一种公共的规范标准,只要符合标准,大家都可以使用。
  12. Java中接口存在的意义:
  13. 用来定义规范
  14. 用来做功能的扩展
  15. 接口也是类的一种,或者说,接口和类一样都属于引用数据类型
  16. 哪些是Java的引用数据类型?
  17. Java中除了8种基本数据类型之外的任意类型都是引用数据类型。
  18. Java中的引用数据类型:
  19. 类 class
  20. 数组
  21. 接口 interface
  22. 枚举
  23. 注解
  24. 定义接口的关键字是:interface
  25. 子类实现接口的关键字是:implements
  26. 子类允许实现多个接口。
  27. 接口不能实例化,我们不能创建接口的对象,
  28. 但是可以创建接口的实习类(子类)的对象
  29. 接口的实现类
  30. 要么重写接口中所有的方法
  31. 要么该实现类必须是一个抽象类
  32. 接口里的成员变量,默认都是使用public static final修饰的
  33. 接口里的任何成员变量,都必须是公共的,静态的,常量
  34. 接口里有构造方法吗?
  35. 接口的作用就是为了扩展子类的功能,根据就没有构造方法。
  36. 接口里的方法默认就是public abstract修饰的
  37. 只不过在Java8和java9之后增加了一下新特性。
  38. 类和接口的关系:
  39. 类和类之间是继承关系,只能单继承,但是可以多层继承
  40. 类和接口之间是实现关系,可以但实现,也可以多实现。一个实现类可以实现多个接口
  41. 接口和接口之间是继承关系,但是接口之间可以多继承。
  42. 创建一个接口:UserDao
  43. 在里面创建一下方法:
  44. 增加用户:addUser()
  45. 修改用户:updateUser()
  46. 删除用户:deleteUser()
  47. 查询用户列表:queryList()
  48. 查询单个用户:queryOneUser()
  49. 创建一个实现类:UserDaoImpl
  50. 实现UserDao接口,重写所有方法,
  51. 比如:
  52. public void addUser(){
  53. System.out.println("增加用户...");
  54. }
  55. 案例:
  56. 定义USB接口(接口具备【开启功能】、【关闭功能】),笔记本要使用USB设备,
  57. 就是笔记本在生产的时候需要预留出可以插入USB设备的USB接口,
  58. 就是笔记本【具备使用USB设备的功能】,但是具体是什么USB设备,
  59. 笔记本并不关心,只要符合USB规范的设备都可以。鼠标和键盘要想能在笔记本电脑上使用,
  60. 那么就必须要符合USB规范,不然即使生产出来也无法使用。
  61. 需求:
  62. - 请描述笔记本类,实现笔记本使用USB鼠标和USB键盘功能
  63. - USB接口具有开启功能``open();``,关闭功能``close();``
  64. - 笔记本类:包含开机功能``run();``,关机功能``shutdown();``,
  65. 使用USB设备功能:``useUSB(USB usb);``
  66. - 鼠标类:符合USB接口(实现USB接口) 鼠标开启,鼠标关闭
  67. - 键盘类:符合USB接口(实现USB接口) 键盘开启,键盘关闭
  68. 接口在Java8和Java9之后先后做了一下修改:
  69. Java8后-接口可以声明【默认方法】:
  70. public default void method(){
  71. }
  72. 作用是解决接口升级的问题。
  73. 默认方法不是抽象方法,所以不能强制重写,但是可以被重写,重写的时候去掉default关键字。
  74. 默认方法可以省略public关键字,但是不能省略default关键字。
  75. 如果实现了多个接口,但是多个接口中存在相同的方法声明,那么子类就必须要对这个方法进行重写。
  76. Java8后-接口可以声明【静态方法】:
  77. public static void method(){
  78. }
  79. 静态方法只能通过接口名调用,不能通过实现类或者对象名调用
  80. public可以省略,static不能省略
  81. Java9之后-接口增加了私有方法
  82. java9之后增加了带有方法体的私有方法,Java8允许接口中定义带有方法体的默认方法或静态方法。
  83. 这样就可能引发一个问题:当两个默认方法或两个静态方法包含一段相同的代码实现。
  84. 程序就必须考虑把这段代码抽取成一个共性的方法。但是这个共性方法是不需要让别人使用的,
  85. 所以使用私有化private把方法给隐藏起来,就是很有必要的。也就是Java9增加接口的私有方法的原因。
  86. interface MyInter{
  87. default void method01(){
  88. baseMethod()
  89. }
  90. default void method02(){
  91. baseMethod();
  92. }
  93. //接口中的私有方法,不让外部使用,只是让自己使用。
  94. //是当前接口多个方法的相同代码进行抽取得到的。
  95. private void baseMethod(){
  96. System.out.println("这是100行代码");
  97. }
  98. }
  99. 注意:
  100. 默认方法可以调用私有的静态方法和非静态方法
  101. 静态方法只可以调用私有的静态方法。
  102. 创建一个接口:UserService
  103. 在里面创建一下方法:
  104. 增加用户:addUser()
  105. 修改用户:updateUser()
  106. 删除用户:deleteUser()
  107. 查询用户列表:queryList()
  108. 查询单个用户:queryOneUser()
  109. 创建一个实现类:UserServiceImpl
  110. 实现UserService接口,重写所有方法,在方法中分别调用UserDao对象中对应的方法
  111. 比如:
  112. UserDao userDao=new UserDao(); //不能创建接口的对象,会报错,因为接口不能创建对象。
  113. UserDaoImpl userDao=new UserDaoImpl();//可以创建接口实现类的对象。
  114. public void addUser(){
  115. userDao.addUser();
  116. }