jdk8jdk9-接口的变化以及好处

JDK全部版本高速下载,JDK1.8高速下载,JDK1.9、JDK10、JDK11、JDK12、JDK13、JDK14、JDK15下载 全版本JDK 下载 JDK8 下载 JDK8(又称 JDK1.8) 是 JDK 的一个重要的长期支持版本(LTS),在生产环境中使用非常广泛。JDK8 是由 Oracle 公司于 2014 年 3 月 18 日发布,支持函数式编程,新的 JavaScript 引擎,新的日期 API 以及新的 Stream API 等。 JDK8 相比之前版本,主要有以下几方面的变化: 支持 Lambda 表达式,通过函数式编程,使得代码更少; 引入新的 Date Time API,加强对日期与时间的处理; 新增 Stre 阅读详情

在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的。由于这些修饰符都是默认的以下写法等价

public interface JDK8BeforeInterface { 
public static final int field1 = 0; 

int field2 = 0; 

public abstract void method1(int a) throws Exception; 

void method2(int a) throws Exception; 
}

JDK8及以后,允许我们在接口中定义static方法和default方法。

public interface JDK8Interface { 

// static修饰符定义静态方法 
static void staticMethod() { 
System.out.println("接口中的静态方法"); 
} 

// default修饰符定义默认方法 
default void defaultMethod() { 
System.out.println("接口中的默认方法"); 
} 
}

public class JDK8InterfaceImpl implements JDK8Interface { 
//实现接口后,因为默认方法不是抽象方法,所以可以不重写,但是如果开发需要,也可以重写 
}

public class Main { 
public static void main(String[] args) { 
// static方法必须通过接口类调用 
JDK8Interface.staticMethod(); 

//default方法必须通过实现类的对象调用 
new JDK8InterfaceImpl().defaultMethod(); 
} 
}

当然如果接口中的默认方法不能满足某个实现类需要,那么实现类可以覆盖默认方法。

public class AnotherJDK8InterfaceImpl implements JDK8Interface { 

// 签名跟接口default方法一致,但是不能再加default修饰符 
@Override 
public void defaultMethod() { 
System.out.println("接口实现类覆盖了接口中的default"); 
} 
}

由于java支持一个实现类可以实现多个接口,如果多个接口中存在同样的static和default方法会怎么样呢?如果有两个接口中的静态方法一模一样,并且一个实现类同时实现了这两个接口,此时并不会产生错误,因为jdk8只能通过接口类调用接口中的静态方法,所以对编译器来说是可以区分的。但是如果两个接口中定义了一模一样的默认方法,并且一个实现类同时实现了这两个接口,那么必须在实现类中重写默认方法,否则编译失败。
也就是说继承两个接口如果有相同的默认方法类,就需要去重写默认方法。

好处

这样实现的好处:可以对于解决某些情况下,接口中的某些方法在子类之中的实现是一样的,这样就能减少重复代码,完成代码的复用;

Java9 的接口私有方法

抽象方法和接口的比较

接口方法默认修饰符是public。在java9以后可以用private定义私有方法,私有方法必须包含方法体。

通过以上对比抽象类的使用场景被削减,那么什么时候还需要使用抽象类
1、需要构造方法。
2、独立运行。
3、定义final方法防止子类篡改。

在使用接口过程中需要注意如下几个问题:

1、Interface的所有方法访问权限自动被声明为public。在java9以后可以定义私有方法,但是必须有方法体不能是抽象方法。

2、接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。

3、不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。

4、在实现多接口的时候一定要避免方法名的重复,尤其是default方法。

5、接口里的方法不能用final修饰

在使用抽象类时需要注意几点:

1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。

2、抽象方法必须由子类来进行重写。

3、只要包含一个抽象方法的抽象类,该类必须要定义成抽象类。

4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。

5、子类中的抽象方法不能与父类的抽象方法同名。

6、abstract不能与final并列修饰同一个类。

7、abstract 不能与private、static、final或native并列修饰同一个方法。

参数抽象类接口
默认的方法实现它可以有默认的方法实现jdk1.8之前没有,现在可以使用default关键字创在interface中创建一个default方法,该方法包含了具体的实现代码,一个接口中可以有多个default方法
实现子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有抽象的方法的实现。子类使用关键字implements来实现接口。它需要提供接口中所有声明的非default方法的实现
构造器抽象类可以有构造器接口没有构造器
实例化不能不能
访问修饰符抽象方法可以有public、protected和default这些修饰符接口方法默认修饰符是public。在java9以后可以用private定义私有方法,私有方法必须包含方法体。 私有方法体只能自己接口内使用
main方法抽象方法可以有main方法并且我们可以运行它接口没有main方法,因此我们不能运行它。
继承单一继承多继承
访问速度它比接口速度要快接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
添加新方法如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。jdk1.8以后可以添加了,也就是说有一些在接口设计上的顽疾现在有了完美解决的方法
public interface SimpleInterface {
     public void doSomeWork();
      //A default method in the interface created using "default" keyword
      //使用default关键字创在interface中直接创建一个default方法,该方法包含了具体的实现代码
      default public void doSomeOtherWork(){
          getStu();
        System.out.println("DoSomeOtherWork implementation in the interface");
      }
      static void getStatic() {
          System.out.println("static method");
        }
      default public void doSomeOtherWork2(){
          getStu();
          //私有静态方法用于为接口中的默认方法服务
          getStatic1();
            System.out.println("DoSomeOtherWork2 implementation in the interface");
          }
      //java9中可以创建私有方法了
      private void getStu() {
          System.out.println( "private method!");
        }
    //java9中可以创建私有静态方法了
      private static void getStatic1() {
          System.out.println("private static method");
        }
}

class SimpleInterfaceImpl implements SimpleInterface{
 @Override
 public void doSomeWork() {
   System.out.println("Do Some Work implementation in the class");
 }
 @Override
 public void doSomeOtherWork() {
   System.out.println("Do doSomeOtherWork implementation in the class");
 }
 /*
  * Not required to override to provide an implementation 
  * for doSomeOtherWork.
  * 在SimpleInterfaceImpl里,不需要再去实现接口中定义的doSomeOtherWork方法
  */

 public static void main(String[] args) {
     SimpleInterfaceImpl simpObj = new SimpleInterfaceImpl();
   simpObj.doSomeWork();
   simpObj.doSomeOtherWork();
   simpObj.doSomeOtherWork2();
   SimpleInterface.getStatic();
 }
}
···


uboot引导vxworks--t2080调试记录 开发环境: t2080rdb, uboot2015, vxworks7.01. 《VxWorks_7_fsl_t2t4_BSP_Supplement_Guide__SR0620.pdf》描述: 实际上默认创建的vip,profile选项为none时,vip内核配置中是包含了INCLUDE_END选项的。所以在创建vip的时候最好就添加上PROFILE_DEVELOPMENT。 2. 内核参数bootargs是一些网络参数设置=> pri bootargs bootargs=memac(1,0)b109304 阅读详情

相关推荐

【ART-Pi与RT-Thread入门】①ART-Pi上手初体验

文章目录关于ART-Pi实物照片板载资源、扩展接口及驱动支持扩展引脚默认固件蓝牙配网微信扫描二维码设备选择 ART-Pi,输入所要连接的 WIFI SSID 和密码配网成功会显示IP地址打开IP地址Finsh控制台配网WindowsmacOS 关于ART-Pi ART-Pi是 RT-Thread 团队为嵌入式软件工程师、开源创客设计的一款极具扩展功能的 DIY 开源硬件。致力打造一个开源的软硬件平台。 实物照片 板载资源、扩展接口及驱动支持 扩展引脚 其中P1排扩展引脚座兼容树莓派的扩展接口,并

SimonLiu的博客 5829

Java基础巩固——JDK 8、9新增接口的特性(接口中定义非抽象方法、静态方法和私有方法)

允许在接口中定义非抽象方法,但需要使用default关键字修饰,称为接口的默认方法;允许在借口中定义非抽象的静态方法解决接口升级的问题;例如,当团队的第一版项目成功上线,一段时间要对项目进行全面升级,要求丰富某一个接口的功能,新增8个方法;假如该项目中有100个类都实现了该接口,那么借口一旦改动,这100个类的都要重写新增方法,牵一发而动全身。

Future_yzx的博客 1540

别让运放自激振荡!手把手教你用波特图分析反相放大电路的稳定性(附LTspice仿真)

本文详细解析了运算放大器在反相放大电路中的稳定性问题,通过波特图分析和LTspice仿真,揭示了自激振荡的成因及解决方案。文章从故障现象识别到数学工具应用,再到实战仿真和工程优化,提供了一套完整的稳定性分析工具链,帮助工程师有效避免运放自激振荡问题。

weixin_31682031的博客 302

JDK9版本后--接口成员特点

Java 9中新增了带方法体的私有方法

m0_59740979的博客 468

【Java完整版 面试必备】Leetcode Top100题目和答案-滑动窗口篇

【Java完整版 面试必备】Leetcode Top100题目和答案-滑动窗口篇

weixin_43298211的博客 2245

用Python写个彩票小助手:自动生成双色球/大乐透号码并保存到桌面

本文介绍如何使用Python开发一个智能彩票助手,实现双色球和大乐透号码的随机生成与桌面文件保存功能。通过详细的代码示例,包括随机号码生成、文件操作、用户交互和错误处理,帮助Python初学者快速掌握实用工具开发技巧。

weixin_42566121的博客 514

java面向对象进阶进阶篇--《JDK8,JDK9接口中新增的方法、接口的应用、适配器设计模式》

在JDK 8中,接口新增了几个重要的特性和方法,其中最显著的是默认方法(Default Methods)和静态方法(Static Methods)。这些特性使得接口在Java编程语言中变得更加灵活和功能强大。

欢迎大家一起讨论交流 1381

手把手教你用GEM-2多频电磁仪找地下管道(附真实数据图)

本文详细解析了使用GEM-2多频电磁仪精准定位地下管线的全流程,包括设备调试、频率选择、现场扫描技巧及数据解读。通过真实案例展示了如何应对复杂干扰环境,提升管线检测效率与准确性,特别适合市政工程和地下管线普查。

weixin_42565652的博客 396

接口从JDK7 到JDK9的变化

变化: 在JDK7 是如此描述接口的:接口里不能包含普通方法,所有方法都是抽象方法; JDK8在JDK7的基础上新增了类方法 默认方法(default修饰的方法) JDK9在JDK8的基础上新增了私有方法 简单介绍一下接口: 接口是抽象概念的一个体现,它抽取相似类的众多共性,抽取为方法,抽象成规范; 接口体现了行为与规范分离的设计哲学 接口不能创建实例.但是可以用于声明引用类型变量 ...

zhaluo_dehezi的博客 387

Allegro规则管理器实战:5步搞定Xnet等长组设置(含Relative Propagation Delay配置)

本文详细介绍了在Cadence Allegro规则管理器中,通过5个实战步骤高效设置Xnet等长组的方法。核心内容包括创建Xnet属性、定义引脚对、建立匹配组,并重点讲解了Relative Propagation Delay规则的配置与应用,帮助PCB设计师确保高速信号时序对齐,提升系统稳定性与性能。

weixin_29193259的博客 514

阿里云百炼全解析:一站式大模型开发平台的架构与行业实践

摘要: 阿里云百炼平台通过一站式架构革新大模型开发范式,将传统碎片化工具链整合为统一工作流,实现开发周期从月级到小时级的跃迁。其核心架构包含接入层、引擎层与资源层,关键技术突破包括MCP服务协议、多模态引擎及高性能训练优化。平台提供全生命周期开发支持,从数据准备到模型部署,并通过VPC隔离、数据加密构建企业级安全体系。已在医疗、电力等行业实现显著增效,如阿斯利康药物分析系统准确率提升至95%。未来将向多Agent协同、边缘计算等方向演进,推动AI技术深度融入产业核心。

fudaihb的博客 1988

JavaSE补充 | 单例模式、JDK8和JDK9中接口的新特性、多线程

JavaSE补充 | 单例模式、JDK8和JDK9中接口的新特性、多线程

m0_61933976的博客 688

【100分- 求最多可以派出多少支团队】(题目+思路+Java&C++&Python解析+在线测试)

用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或者2人组成,且1个人只能参加1个团队,计算出最多可以派出多少只符合要求的团队。

m0_73659489的博客 313

JDK8中接口的变化

目录JDK8在接口中的变化文字描述代码演示 JDK8在接口中的变化 文字描述 JDK8中,接口中可以定义default方法和static方法。 接口中的 default方法 只能使用接口的实现类对象来调用(default方法属于实例)。 接口中的 static方法 只能使用“接口名.静态方法名” 的方式调用(static方法属于接口)。 接口中的静态方法不会被子接口继承, 接口中的静态变量会被...

localhost65535的博客 621

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jdk1.8接口变化

文章目录jdk1.8接口变化 jdk1.8接口变化 简介 我们通常所说的接口的作用是用于定义一套标准、约束、规范等,接口中的方法只声明方法的签名,不提供相应的方法体,方法体由对应的实现类去实现。 在JDK1.8中打破了这样的认识,接口中的方法可以有方法体,但需要关键字static或者default来修饰。 关键词 属性 static 静态方法,静态方法通过接口名来调用 default 默认方法,默认方法通过实例对象来调用 作用 静态方法和默认方法都有自己的方法体,用于提供一套

wohainengqiao的博客 844

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

从JDK 8到JDK 17的主要变化

新项目建议直接使用JDK 17,它是最新的长期支持版本。

lanwp5302的博客 911

java 接口(interface)在不同JDK版本中的变化

接口定义: 使用interface关键字 。 接口中的 所有 成员变量 都默认是由 public static final 修饰的。 接口中的 所有方法 都默认是由 public abstract 修饰的。也可以使用protected,但不能用private。 接口中的 所有方法 都没有方法体。 接口没有构造方法。因为构造方法用于创建对象。 实现接口的类中必须提供接口中所有方法的具体实现内容。 ...

猎人在吃肉 3305

JDK9相比于JDK8,究竟变强了多少

JDK9相比于JDK8,究竟变强了多少

Java鱼仔的博客 3306

jdk8 接口的变化

在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的。由于这些修饰符都是默认的以下写法等价 public interface JDK8BeforeInterface { public static final int field1 = 0; int field2 = 0;...

weixin_30551963的博客 176

Jdk 8和Jdk 9及以上版本中toArray()方法区别及用法

Java 的 JDK 8 和 JDK 9 及以上版本中,Stream 接口的 toArray 方法有一些细微的变化,主要体现在其签名和使用方式上。改进:JDK 9 开始,在一些情况下,JVM 可以更好地优化流操作,包括 toArray,提高了性能。同 JDK 8,使用提供的数组生成器将流中的元素收集到一个新的数组中。同 JDK 8,将流中的元素收集到一个新的 Object 数组中。作用:使用提供的数组生成器将流中的元素收集到一个新的数组中。作用:将流中的元素收集到一个新的 Object 数组中。

weixin_42098295的博客 1073

jdk9 -> jdk17 编程方面的变化

jdk9 -> jdk17 编程方面的变化

guchuanhang的专栏 787

Java接口优化:JDK 8、JDK 17与JDK 21中接口默认方法与静态方法的区别是什么?

随着Java版本的演进,接口功能逐步增强。JDK 8引入了默认方法和静态方法,JDK 17和JDK 21继续优化接口特性,让接口的灵活性更强。在这篇文章中,猫头虎将带你深入了解: JDK 8接口中的默认方法与静态方法是什么? JDK 17和JDK 21中接口功能有哪些变化? 代码实战+详细解读,搞懂不同版本接口的区别! 全面掌握这些知识,让你写出更灵活、现代化的Java代码

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 2650

Java 8前后接口的变化

在 Java 8 之前,接口(interface)只能包含以下两种成员(常量和抽象方法),—「纯契约,无实现」 Java 8 对接口进行了重大增强,引入了 默认方法(Default Methods) 和 静态方法(Static Methods),—「定义契约的同时,支持代码复用」Java 9+:引入私有方法(进一步封装逻辑)。这些变化使接口更灵活,既能保持抽象性,又能提供具体实现,适应现代函数式编程和API设计的需求。 抽象方法(public abstract 方法):所有方法默认是 public ab

vio小黑 916

day034:接口(2)JDK8版本、JDK9版本中接口成员的特点

接口的介绍:day033:接口_ZQyyds:)的博客-优快云博客 一、JDK8版本后接口成员的特点: 1.在JDK8版本后,允许在接口中定义非抽象方法,需要用default关键字修饰,这些方法成为默认方法。其作用是:解决接口升级问题 接口中默认方法的定义格式: 格式:public default 返回值类型 方法名(参数列表){} 范例:public default void show(){} 接口中默认方法的注意事项: 默认方法不是抽象方法,所以不强制重写。如果实现类出现接口.

ZuoQi的博客 898

JDK 8 接口的变化

②接口中新增的方法 Ⅰ 在JDK 8中针对接口进行了增强, 在JDK 8之前 interface 接口名{ 静态常量; 抽象方法; } JDK 8 之后 interface 接口名{ 静态常量 抽象方法 默认方法 静态方法 } Ⅱ 默认方法 为什么要有默认方法?? 在JDK 8 以前,接口中只有抽象方法和静态常量,会存在以下问题: 在接口中新增方法,所有实现类都要重写该方法,不利于接口的扩展。 public class Demo01Interface { A a=new B();

m0_54202121的博客 325
上一篇: JavaWeb四大作用域
下一篇: docker 安装 mysql5.7
happytaohaha
博客等级 码龄9年 37粉丝 187原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值