目录
1.1 JCP (Java Community Process)
1.2 JSR (Java Specification Requests)
1.3 JEP (Java Enhancement Proposal)
JDK引言
1.相关组织和规范
1.1 JCP (Java Community Process)
JCP(Java Community Process)由世界上各个为Java 发展操心的人士组成的社区,参与定义Java新特性和新版本制定标准的组织。
1.2 JSR (Java Specification Requests)
JSR(Java Specification Requests) Java语言规范请求文档,你可以对Java提出新的要求,然后Java相关的组织投票决定是否通过,通过后就将这个要求写入JSR中,并且最终给出一个开源的实现。
1.3 JEP (Java Enhancement Proposal)
JEP(Java Enhancement Proposal),Java增强建议,收集大家对于JDK的建议,起草增强Java哪些功能的方案,为JDK新版本发布及相关工作指定路线。
JDK8新特性
官网提供网址:JDK 8 Features
接下来主要介绍
1.接口增强
在JDK8中行增加了两个方法,一个是默认方法,一个是静态方法。
思维导图
1.1 默认方法
1.1.1 为什么引入默认方法
在JDK 8以前接口中只能有抽象方法,这会存在以下问题:如果给接口新增抽象方法,所有实现类都必须重写这个抽象方法,从而不利于接口的扩展。
方便接口的扩展
1.1.2 如何使用默认方法
使用关键字default 来定义,并且需要有方法的实现
/** * JDK8新特性 接口增强 默认方法 */ public interface InterA { void show(); void print(); /** * 默认方法,使用default 关键字来定义,需要有方法的实现 * 其子类可以去重写或者不去重写 * 因为接口的默认方法实现类不必重写,可以直接使用, * 实现类也可以根据需求重写, * 方便了接口的扩展 */ default void run() { System.out.println("InterA 默认方法,使用default 关键字来定义,需要有方法的实现"); } }
1.1.3 如何调用默认方法
通过实例调用
1.1.4 默认方法案例
先写两个实现类SubB 和 SubC ,并实现InterA接口
其中SubB重写run()方法
SubC不重写run()方法
public class SubB implements InterA{ @Override public void show() { } @Override public void print() { } @Override public void run() { System.out.println("SubB 的 run方法"); } }
public class SubC implements InterA{ @Override public void show() { } @Override public void print() { } }
写一个测试类,进行测试
public class DefaultMethodTest { public static void main(String[] args) { //SubB 重写了run() InterA ia =new SubB(); ia.run(); //SubC 没有重写了run() InterA ia2 = new SubC(); ia2.run(); } }
运行结果:
1.1.5 默认方法总结
1.为什么引入默认方法: 方便接口扩展
2.如何使用默认方法:使用default 关键字来定义,需要有方法的实现
3.如何调用默认方法:通过实例调用
4.默认方法的使用细节:
因为接口的默认方法实现类不必重写,可以直接使用,
其实现类可以去重写或者不去重写,
实现类也可以根据需求重写。
1.2 静态方法
1.2.1 如何使用静态方法
修饰符 static 返回值类型 方法名(参数列表) {
方法体; }/** * JDK8中 接口中的静态方法 */ public interface InterB { /** * 接口中的静态方法 * 接口中的静态方法,其方法不能被子类重写,同时子类不能访问到接口的静态方法 * 接口中的静态方法,只能被接口使用,子类是无法使用 */ public static void show() { System.out.println("接口中的静态方法"); } /** * 默认方法 子类可以继承并且重写 * */ default void say() { System.out.println("接口中的默认方法"); } }
1.2.2 如何调用静态方法
接口名称.静态方法名()
1.2.4 静态方法案例
写一个测试类,进行测试
public class InterfaceStaticTest { public static void main(String[] args) { InterB.show(); } }
运行结果:
1.2.5 静态方法总结
1.如何使用默认方法:
修饰符 static 返回值类型 方法名(参数列表) {
方法体; }2.如何调用静态方法:接口名称.静态方法名()
3.静态方法的使用细节:
接口中的静态方法,其方法不能被子类重写,同时子类不能访问到接口的静态方法
接口中的静态方法,只能被接口使用,子类是无法使用