JAVA 接口及Java8更新相关内容

Android Static interface methods are only supported starting with Android N (--min-api 24) Static interface methods are only supported starting with Android N (--min-api 24) 大概意思就是静态接口方法只从Android N开始使用。 解决方法如下: 因为静态接口需要在Java 8 下才支持使用,所以我们要使用静态接口,就需要在app的build.gradle文件中配置声明,使用Java 8编译。 所以需要... 阅读详情

定义接口使用的是接口是interface

接口型引用:如果接口的子类实现了接口中的所有的功能,那么这个子类就可以被实例化,

子类就符合这个规则,所以接口型引用指向的都是自己的子类对象(多态)。

 

对于接口中常见的成员,而且这些成员都有固定的修饰符(不写帮你加):

1、全局常量:public static final(不定义为常量的话会被接口所实现的类到处修改,且接口名可以直接调用)

2、抽象方法:public abstract

 

接口的特点:

1、接口是对外暴露的规则

2、接口是程序的功能扩展

3、接口的出现降低了耦合性

4、接口是对方法的抽象

 

接口与抽象类的区别:

相同点:都是不断向上抽取而来

不同点:

    1、抽象类需要被继承且只能单继承,接口需要被实现且可以多实现

    2、抽象类中可以定义抽象方法和非抽象方法,子类继承后可以直接使用非抽象方法

          接口中只能定义抽象方法,必须由子类实现

    3、抽象类的继承是is a关系,在定义该体系的基本共性内容

          接口实现是like a关系,在定义体系额外功能

接口中的成员都是公共的权限

 

只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化。否则,这个子类就是一个抽象类。

 

在JAVA中不直接支持多继承,因为会出现调用的不确定性,所以在JAVA中变成了多实现。

一个类可以实现多个接口。

 

接口的好处可以体现在下图中:

接口A和接口B中有相同的方法,但是接口是抽象方法,需要实现,因此Test这个实现类可以把两个接口中的方法都覆盖掉,从而解决冲突。

一个类在继承另一个类的同时,还可以实现多个接口

接口与接口之间是继承关系,而且接口可以多继承!!!!!!!!

 

Java8对接口的更新:

在Java8中对接口进行了两类更新:1、接口中可以添加静态方法 2、接口中可以添加默认实现

1、静态方法:

在以前的类库中,经常会看到成对出现的接口和工具类(Collection/Collections、Path/Paths)通常是把静态方法放在工具类中。但在Java8中,可以将Paths.get()这一静态方法直接定义在Path接口中,这样Paths就不是必须的了:

public interface Path
{
    public static Path get(String first, String...more) {
        return FileSystems.getDefault().getPath(first, more)
    }
}

2、默认方法:

1)使用

可以在接口中添加方法的一个默认实现(需要用default修饰)。例如在Java8中MouseListener可以改写为如下:

public interface MouseListener
{
    default void mouseClicked(MouseEvent e) {}
    default void mousePressed(MouseEvent e) {}
    default void mouseReleased(MouseEvent e) {}
    default void mouseEntered(MouseEvent e) {}
    default void mouseExcited(MouseEvent e) {}

}

这样以来不再需要MouseAdapter适配器来先覆盖接口再拿匿名内部类来实现(接口必须实现全部方法,适配器抽象类需要用空方法实现接口全部方法),只需要覆盖相应监听器方法即可(default已经使用空方法实现)。

此外,默认方法可以调用其他任何方法(包括没有实现的!):

public interface Collection
{
    int size(); // abstract method! 
    default boolean isEmpty() {
        return size() == 0;
    }
}

这样无须担心isEmpty()的问题。

2)解决冲突

冲突解决遵循一下两项原则:

1、父类优先:如果同时继承一个父类和一个接口,若父类提供了一个具体方法,同名而且有相同参数类型的默认方法会被忽略。

2、接口冲突 :如果Person和Named两个接口提供了不一致的getName()方法,则Java会报告错误让程序员解决这个二义性问题(Person.super.getName()或Named.super.getName())。只要有一个接口提供了默认实现,编译器就会报错。

interface Named
{
    default String getName() {return "N";}
}


interface Person
{
    default String getName() { return "P"; }
}


public class Student implements Person, Named
{
    public String getName() { return Person.super.getName(); } // 注意此处指定方法的写法!

    public static void main(String[] args) {
    	System.out.println(new Student().getName()); // 结果为
    }
}

注:不可让一个默认方法重新定义Object类中的某个方法(不能将equals()和toString()定义为默认方法),因为父类优先原则,这样的方法无法超越Object.equals()和Object.toString()!

Java 8 Update 51 (8u51)是Java 8的一个更新版本,它于2014年9月发布 满足两个条件中的任何一个(新发行版可用或到达到期日期)后,Java 将向用户提供其他警告和提醒以更新到较新版本。Java 8 Update 51 (8u51)是Java 8的一个更新版本,它于2014年9月发布。本发行版包含对安全漏洞的修复。总的来说,Java 8 Update 51是一个相对较小的版本更新,主要是对之前版本的一些bug进行了修复和性能优化。有关此发行版中包含的 Bug 修复列表,请参阅 JDK 8u51 Bug 修复页。4. Java 8u51中的BUG修复具体解决了哪些问题? 阅读详情

相关推荐

Java 8 Update 131 (8u131)是Oracle公司发布的Java 8的一个更新版本

满足两个条件中的任何一个(新发行版可用或到达到期日期)后,Java 将向用户提供其他警告和提醒以更新到较新版本。有关此发行版中包含的 Bug 修复列表,请参阅 JDK 8u131 Bug 修复页。总的来说,Java 8 Update 131 (8u131)是一个稳定的更新版本,修复了一些已知的问题,并提供了对JavaFX的一些改进。Java 8 Update 131 (8u131)是Oracle公司发布的Java 8的一个更新版本。这个更新版本主要修复了一些bug,并提供了对JavaFX的一些改进。

[Blog][Domain] programb.blog.youkuaiyun.com 3003

实战 Java 第6天:开发更新商品接口

实战 Java 第6天:开发更新商品接口前言一、在 ProductService 类中添加 updateProduct 接口二、在 ProductMapper 类中添加 updateProduct 接口三、增加 sql 语句四、在 ProductController 类中添加业务逻辑五、测试接口是否成功六、总结 前言 在前面的《实战 Java 第5天》学习了如何开发商品查询(模糊查询与条件查询...

杏子 3310

Java 8 Update 231 (8u231)是Oracle公司发布的Java 8的一个更新版本

只要具有安全漏洞修复的新发行版可用,Java 就会到期。Java 8 Update 231(8u231)是Oracle公司在2019年12月发布的Java Development Kit(JDK)的一个更新版本。对于开发者和企业来说,更新到最新的Java版本是非常重要的,因为这样可以确保他们的应用能够利用最新的技术改进,并且保持系统的安全性。总的来说,Java 8 Update 231是一个非常重要的更新版本,它不仅修复了一些已知的问题,还引入了一些新的特性,使得Java 8更加稳定和强大。

[Blog][Domain] programb.blog.youkuaiyun.com 2855

JDK1.8之后的版本变更

在2011年JDK1.7版本发布,因其引入了许多新功能、改进和性能优化,大行其道;直至2014年JDK 1.8 版本开启了Lambda表达式实现函数式编程,引入Stream API,新的日期和时间API等特性,使Java编程语言更加现代化,也提供了更多的工具和语言特性,让java 开发者开启了更加简洁的代码编写风格,使得这一个稳定版本得到了广大开发者的喜爱,即使当前JDK版本发布到21,但是1.8任然是大部分程序员的最爱。

px的博客 1572

Jetson Orin NX上CAN总线调试全攻略:从硬件焊接到开机自启动(附常见问题解决方案)

本文详细介绍了在NVIDIA Jetson Orin NX开发板上进行CAN总线调试的全过程,包括硬件焊接、驱动配置、通信测试和开机自启动设置。针对常见问题如信号接反、波特率设置等提供了实用解决方案,帮助开发者快速实现稳定的CAN总线通信。

c2d3e4f的博客 1076

利用python爬取东方财富网股吧评论并进行情感分析(一)

利用python爬取东方财富网股吧评论(一) python-东方财富网贴吧文本数据爬取 分享一下写论文时爬数据用到的代码,有什么问题或者改善的建议的话小伙伴们一起评论区讨论。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直

YMG521000的博客 1万+

java重温(接口更新、方法引用)

目录 一:接口组成更新概述 二:接口组成 2.1 接口中的默认方法 2.2接口中的静态方法 2.3接口中的私有方法 三:方法引用 3.1 体验方法引用​​ 3.2 方法引用符​ 3.3 Lambda表达式支持的方法引用 3.3.1 Lambda表达式引用类方法 3.3.2Lambda表达式引用对象的实例方法 3.3.3Lambda表达式引用类的实例方法​​​3.3.4Lambda表达式引用构造器(构造方法)​ 一:接口组成更新概述 二:接口组成 2.1 ...

qq_56127002的博客 671

算法之动态规划(DP)求解完全背包问题

算法之动态规划(DP)求解01背包问题 上面这篇文章主要讲解了01背包问题和动态规划算法,如果你不了解动态规划算法,建议先浏览一下这篇文章熟悉一下,因为,本文的算法思想是基于这篇文章的。 1、什么是完全背包问题? **01背包问题:**有一个背包的容积为V,有N个物品,每个物品的体积为v[i],权重为w[i],每个物品只能取1次放入背包中,背包所有物品权重和最大是多少? 完全背包: 有一个背包的容积为V,有N个物品,每个物品的体积为v[i],权重为w[i],每个物品可以取无限次放入背包中,背包所有物品权重和

PRML_MAN的博客 2万+

【一篇带你了解Java8 - Java17的更新内容】

一篇带你了解Java8 - Java17的更新内容

The____wind的博客 1438

Spring Cloud 整合(一) CRUD

Springcloud 整合之 CRUDSpringcloud介绍功能概述为什么要选用Springcloud Springcloud介绍 功能概述 实现微服务 Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的某些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)。分布式系统的协调导致样板式样,并且使用Spring Cloud开发人员可以快速站起来实现这些样板的服务和应用程序。 为什么要选用Springcloud

Kerwin-Lin的博客 1501

固定资产报废的损失鉴定怎么做?

在社会生产的日常中,企业经常会遇到固定资产报废的损失鉴定,那么怎么去做鉴定?哪些情况下能申请固定资产报废损失鉴定呢? 今天,华碧鉴定就和大家说一说固定资产报废损失鉴定那些事儿。 符合下列条件之一的固定资产可申请报废: 1、使用年限过长,功能丧失,完全失去使用价值,或不能使用并无修复价值的; 2、产品技术落后,质量差,耗能高,效率低,已属淘汰且不适于继续使用,或技术指标已达不到使用要求的; 3、严重损坏,无法修复的或虽能修复,但累计修理费已接近或超过市场价值的; 4、主要附件损坏,无.

weixin_50362670的博客 2116

java .do是什么_为什么Java Web应用程序使用.do扩展名?它从哪里来的?

注意: 本节中的材料并不特定于Struts。Servlet映射的配置在Java Servlet规范中定义。本节介绍配置应用程序的最常用方法。有两种常见的方法来定义将由控制器Servlet处理的URL:前缀匹配和扩展名匹配。下面将描述每种方法的适当映射条目。前缀匹配意味着您希望将以特定值开头(在上下文路径部分之后)的所有URL传递到此servlet。这样的条目可能如下所示:action/do/*这意...

weixin_31860973的博客 2046

K8S搭建(centos)完整版

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 4147

java 新特性总结

可以有静态方法和。

qq_40813329的博客 391

谁还攥着旧的类加载器:Metaspace OOM 的元数据记账、类卸载条件与泄漏定位解析

MetaSpace区是JVM内存管理中的关键部分,负责存储类元数据。随着Java 8的推出,MetaSpace取代了PermGen区,但其灵活性也带来了新的挑战,尤其是在动态类加载和频繁类更新的场景下,容易导致MetaSpace内存溢出(OOM)问题。本文探讨了MetaSpace OOM的根本原因,包括类加载器泄漏、内存管理不当和GC效率低下等,并提供了一系列调优策略和解决方案,帮助开发者有效排查和防止此类问题的发生,确保应用程序的稳定性和高可用性。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 15万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java8新特性(一)_interface中的static方法和default方法

记录学习 Java8新特性(一)_interface中的static方法和default方法

weixin_41122200的博客 377

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JDK8新特性

JDK8 常用新特性。

2301_78985459的博客 1403

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JDK8十个新特性

一、Lambda表达式 Lambda 表达式也可称为闭包,是推动 Java 8 发布的最重要新特性。lambda表达式本质上是一个匿名方法。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)或者把代码看成数据。使用 Lambda 表达式可以使代码变的更加简洁紧凑。在最简单的形式中,一个lambda可以由:用逗号分隔的参数列表、–>符号、函数体三部分表示,在某些情况下lambda的函数体会更加复杂,这时可以把函数体放到在一对花括号中,就像在Java中定义普通函数一样。Lambda可以引

m0_51124830的博客 548

android8.0的电池图标,Android 8.0 电池图标 显示分析

frameworks/base/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java 显示电池图标变化状态,setImageDrawable(mDrawable) 就是设置的电池图标。public BatteryMeterView(Context context, AttributeSet attrs, int defSt...

weixin_42550750的博客 518

java 8版本后的每次更新内容

简单记录java8版本后,每次版本更新重要内容。

weixin_42124444的博客 2427

浅谈JAVA8引入的接口默认方法

浅谈JAVA8引入的接口默认实现 JAVA接口基础 接口定义 在JAVA中,接口的作用主要是定义该类型实例具有的功能,也就是定义必须执行那些工作,而不关心如何进行这些工作。所以,在接口中定义的方法没有方法体,并且接口不允许定义实例变量。以下代码中定义名为MyInterface的接口,并且在该接口中定义了getInt方法,如果有类实现了该接口,则根据JAVA语法,该类必须实现getIn

行者 1万+

java 更新订单状态_Java 8状态更新

java 更新订单状态 即将到来的Java SE 8发行版的两大新语言功能是Lambda Expressions和Modularity。 这两天的状态更新都已经发布。 我会与您分享链接,因此您可能会在假期中通读它们 Oracle计划在2013年中期发布Java SE 8。 Lambda项目 Lambda项目以及JSR-335希望提供一种将代码建模为Java中数据的方法-用非精确的俗语来...

最佳 Java 编程 1043

全网最全的 Java 技术栈内容梳理(持续更新中)

大家好,我是栗筝i,从 2022 年 10 月份开始,我将全面梳理 Java 技术栈的相关内容,一方面是对自己学习内容进行整合梳理,另一方面是希望对大家有所帮助,使我们一同进步。 在更新上我将尽量保证文章的高频、高质、高量,希望大家积极交流监督,以此让我们共同进步。

栗筝i的博客 5万+

java接口变化_Java8 在接口的变化

Java8 对接口的改变1.增加了default方法和static方法,这两种方法完全可以有方法体2.default方法属于实例,static方法属于类(接口)3.接口中的静态方法不会被继承,接口中的静态变量会被继承实例如下:package com.xxf.lambda.java8features;/*** com.xxf.lambda.java8features* 2018/9/19* auth...

weixin_36081677的博客 289

掌握Java 8中的Predicate函数式接口

掌握Java 8中的Predicate函数式接口;

末尾卡片和博主交流学习! 2369
上一篇: 欧拉回路的判断
下一篇: JAVA 抽象类
donCoder
博客等级 码龄9年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值