接口: 只有抽象方法的抽象类 我们可以用接口替代
为什么这么做?
很简单 , 理由如下 :
1/多继承
2/设计和实现分离
3/更自然的使用多态
4/更容易实现框架搭建
5/更容易实现更换修改等操作 ..... 等等优势
接口是一种约定
针对接口编程 :程序设计时追求针对接口的约定而不考虑具体的实现 spring框架的极致体现
关心类具有的能力,而不去关心实现细节
接口不能实例化 而接口的实现可以
===================================================
接口中所有的属性都是public static final 修饰的
常量可以是基本数据类,也可以是引用数据类型
注意 :
常量的命名规范全部字母大写
接口的修饰符可能是包 访问级别的,所以public常量有可能访问不到
推荐使用枚举保存一组先关数据的值 jdk5以上
接口成员 ----方法
1/抽象方法
2/静态方法
3/默认方法 后两种属于java8新增的
接口可以继承接口 不能继承静态方法
========================================================
一个类可以实现多个接口 接口可以作为数据类型用来声明变量
实现接口的抽象类可以重写部分接口中的抽象方法
----------------------------------------------------------------------------
java8提出的新语法
一 接口的静态方法
1/可以在接口中声明静态方法,实现一些处理逻辑
2/该方法不会被实现类和子接口继承
这样我们在使用接口时可以直接打点调用接口里的静态方法 ,而也只可以以这种方式进行调用其方法
二 接口的默认方法
默认方法对所有实现改接口的类都提供了默认的实现
可以有多个默认方法
不能是静态的
可以重写默认方法
为什么有默认方法? 之前是通过接口中声明方法 在接口的实现中实现方法 但如果在一个已经运行的程序中有可能出现这样一种情况
对于一个接口可能要求新增一个方法,而这个接口的实现类则必须都去实现这个方法,做出相应的修改
基于这样的考虑 ,java8 的设计者提出了这样一种方法....
例如 --->default viod show () { } 这样接口的实现类就都拥有了这样一种行为
默认方法和类的普通方法相比较:
相同点: 都提供了实现 都可以用this表示当前运行的实例
不同点: 类的普通方法可以访问实例到变量 而默认方法不可以,他只能访问接口中的其他成员
--->对于不同点所提出的的默认方法只能访问接口的其他成员 ,而不可以访问实例的变量是因为此处在逻辑上是不可以的
很简单 ,现有的接口,后有的实现类 .... 重写方法除外
=============================================================
此处做三块而记录 1/解决冲突 2/标记接口 3/ 函数式接口
1/ 冲突是什么??? 在java8 中由于有了默认方法 ,有利有弊,其产生的弊端之一便是冲突
如: A类有一个方法 show() B接口有一个默认方法show() 某实现类继承A同时实现了B接口 ,此时这个实现类的实例
在调用show方法时,会出现冲突 ,接口默认方法与父类方法的冲突
--->结论 : 父类与接口方法冲突时 ,父类优先
默认方法不能和Object中的方法相同不能同时出现,为什么呢 ? 因为Object是所有类的父类,接口里写了没有调用的可能
当多个接口的默认方法名相同,参数不同是,按照重写规则 ,接口中的默认方法可以重载
当多个接口有完全相同的默认方法时, 子类必须重写该方法
-------------------------------------------------------------------------------
标记接口? 没有任何成员的接口 ,自身没有任何成员,也没有从父接口继承成员
有啥用?用于标记一个类在特定的环境中有特定的意义
在jdk中
1./ java.lang.Cloneable 标记接口 表示这个类是可以克隆的
2./java.io.Serializable 标记接口 表示这个类可以被序列化
3./java.rmi.Remote 标记接口 和远程调用方法有关 ...?
java 5 引入注解的语法可以实现相同的标记功能 而且性能相对更好 ,此处未做相关资料整理
========================================================
函数式接口: 只有一个抽象方法的接口 , 告别匿名内部类 ( ) -->
@FunctionalInterface 标记函数式接口注解 jdk8 引入 此注解可选
主要目的 : 用来和lambda表达式关联