JAVA---jdk1.8之后的接口(接口中定义默认方法和静态方法,私有方法)

JAVA—jdk1.8之后的接口(接口中定义默认方法和静态方法)

从jdk1.8开始,接口里允许定义默认方法

格式:public default 返回值类型 方法名(参数列表){ 方法体 }
public interface Demo1 {public default void method2(){System.out.println("Hello");}
}

为什么要定义默认方法?为了解决接口升级的问题

什么是接口升级?

如果当前有一个接口,并且n多个类实现了这个接口;而当接口再次添加抽象方法的时候,n多个实现类就会报错。而出现了默认方法就解决了这个问题

接口中的默认方法怎么用?

接口:

public interface Demo1 {public abstract void method();//新添加的默认方法public default void methodDefault(){System.out.println("这是新添加的接口默认方法");}
}

实现类:

public class MyImpA implements Demo1 {@Overridepublic void method() {System.out.println("这是实现类的抽象方法");}
}

main方法:创建了实现类的对象,可以调用实现类的方法,也可以调用接口的默认方法

注意:如果实现类重写了接口的默认方法,那么调用的就是实现类重写后的方法

public class Main {public static void main(String[] args) {MyImpA a = new MyImpA();a.method();a.methodDefault();  //调用接口的默认方法}
}

输出结果:这是实现类的抽象方法
这是新添加的接口默认方法

从jdk1.8开始,接口可以定义静态方法

格式:public static 返回值类型 方法名称(参数列表){ 方法体 }
调用:直接 接口名.方法名 调用,与普通静态方法的调用一样(不能通过接口实现类的对象来调用接口中的静态方法)

接口:

public interface Demo2 {public static void method(){System.out.println("这是接口的静态方法");}
}

mian方法:

public class MyImpB {public static void main(String[] args) {Demo2.method();  //输出   这是接口的静态方法}
}

从jdk1.9开始:接口中允许定义私有方法

1.普通私有方法:解决多个默认方法之间重复代码的问题

格式:private 返回值类型 方法名称(参数列表){ 方法体 }

2.静态私有方法:解决多个静态方法之间的重复代码问题

格式:private static 返回值类型 方法名称(参数列表){ 方法体 }

接口中的常量(就是成员变量)的写法格式:

[public][static] [final] 数据类型 常量名称 = 数据值;

注意:

1.接口没有静态代码块,不能有构造方法

2.一个类可以实现多个接口

3.如果实现类所有实现的多个接口中,存在重复的抽象方法,覆盖重写一次即可

4.如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么这个实现类必须是一个抽象类

5.接口可以多继承,但是如果继承来多个defalut方法相同,那么必须对冲突的defalut方法进行覆盖重写

6.一个类如果直接继承父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类的方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node 后台重定向_登录后重定向到用户原本要访问的页面《 Node.js 应用:重构与改进 #3 》...

现在我是未登录的状态 ... 可以先试着打开一个内容的编辑界面 ... 会被重定向到登录页面 ... 输入用户名 ... 密码 .. 确认登录 ... 成功以后会把用户重定向到这个用户页面上 ... 现在我想用户登录以后,可以把他重定向到他原本要访问的页面 ..回到项目 .. 打开 hook…

端口号被占用:Disconnected from the target VM, address: ‘127.0.0.1:XXXX‘, transport: ‘socket‘

debug启动Spring boot项目的时候,项目没有启动起来。log最后一行,显示Disconnected from the target VM, address: ‘127.0.0.1:XXXX’, transport: ‘socket’。 解决方式!!! 1、看看是谁占用了我的端口号&#xff…

mysql截取字符串去重_mysql 截取字符串 去重 拼接

1:字符串截取LEFT(guid_,LENGTH(guid_) - 5)//1001-1002-1003 截取为 1001-10022:判断是否存在某字符串中IN(1001,1002,1003)// where id in(xxxx) 可以用查询的某个字段直接 where id in (select id from xxxx)3:根据某个字段去重复在查询结…

Linux系统tab自动补全快捷键的时候显示cannot create temp file for here-document: No space left on device解决方案

登陆linux系统之后,使用tab自动补全快捷键的时候显示:cannot create temp file for here-document: No space left on device。 原因:磁盘满了,不能创建临时文件。 解决方法:(逐级查看占用空间过多的目录…

python画二维数组散点图_2个numpy二维数组的散点图

IIUC,你不需要zip步骤:s (arr1.ravel(), arr2.ravel())plt.scatter(*s)plt.show()或者,你也可以通过策划arr1和arr2:plt.scatter(arr1, arr2)plt.show()原因是,通过压缩,可以创建许多坐标元组:>>> list(zip(*s))[(0.5233576831070681, 0.3622905772322086), (0.67714…

双表联查mysql_MySQL的双表多表联查

最近在做EC-Mall的二次开发,遇到这么一个需求,将挂件单独显示成一个页面。由于EC-Mall的挂件是用数据模块模块类库的方式进行的,就是使用类似smarty的形式。而单独一个页面的话,数据读取需要自己写SQL语句。 现在的问题是&#xf…

Linux命令——echo追加和覆盖

追加: echo " " >> 文件名覆盖: echo " " > 文件名ximong:~$ cat aa.sh #打印文件aa中原来的内容,显示aa aaximong:~$ echo bb >> aa.sh #  在文本末尾追加 ximong:~$ cat aa.sh aa bbximong:~$ echo cc >aa.sh…

如何安装mysql 匹配_学习笔记----安装MySQL

安装MySQL1.下载解压源代码包。我的是mysql 5.1.48版本的。2.添加mysql用户和组[roottigertall mysql-5.1.48]#groupadd mysql[roottigertall mysql-5.1.48]#useradd -g mysql mysq3.编译安装[roottigertall mysql-5.1.48]# ./configure --enable-assembler \--with-client-l…

Linux中的通配符

Linux中的通配符 Linux中的通配符 *匹配任意长度的任意字符,可以没有?匹配任意单个字符,至少有1个[ ]匹配指定字符范围内的任意单个字符[a-z,A-Z,0-9]匹配所有数字和字母[a-z]匹配a-z中的一个[A-Z]匹配A-Z中的一个[a-Z]匹配所有大小写字母[:upper:]所…

mysql区间段_解决针对MySQL中对于某一个区间段范围的数据更新的情况

(1)在使用更新update的过程中,我们可能会想要更新比如id段在某一个指定范围内的数据,如果我们是想要更新前面多少行的数据的话可以直接:UPDATE tb_name SET column_name‘value‘ ORDER BY id ASC LIMIT 20;比如我想要把下面的这个员工信息表…

SpringBoot实现执行sql语句打印到控制台

SpringBoot实现执行sql语句打印到控制台 1.简介 每当写完持久化语句时肯定免不了要查漏补缺一波。这里就可以将执行的sql打印到控制台来检查sql语句哪里出了问题。 2.配置 配置非常简单,只需要在配置文件中设置下mapper日志级别就可以了 application-test.prop…

Java 8 lamda Stream的Collectors.toMap 参数

java 8 lamda Stream的Collectors.toMap 参数 使用toMap()函数之后,返回的就是一个Map了,自然会需要key和value。 toMap()的第一个参数就是用来生成key值的,第二个参数就是用来生成value值的。 第三个参数用在key值冲突的情况下:…

Java8中的Collectors.groupingBy用法

Collectors.groupingBy根据一个或多个属性对集合中的项目进行分组 数据准备: public Product(Long id, Integer num, BigDecimal price, String name, String category) {this.id id;this.num num;this.price price;this.name name;this.category category; …

什么是CDN,有何作用?

cdn顾名思义是一个英文缩写,全称是contentdeliverynetwork(内容分发网络),即服务商通过在世界各地部署大量服务器节点,缓存源站静态资源(目标服务器),当用户访问时返回最优线路的资源…

BigDecimal中divide(除)方法注意问题_BigDecimal 判断大于小于

BigDecimal中divide方法抛异常: Non-terminating decimal expansion; no exact representable decimal resultIdea也会给出警告 原因是在做除法的时候出现了无限不循环小数如:33.333333333333 解决方案 在做除法的时候指定保留的小数的位数: BigDecimal rate …

python 字符串操作速度_强者一出,谁与争锋?与Python相比,C+的运行速度究竟有多快?|python|编程语言|字符串|示例|算法...

对于数据科学家而言,热爱Python的理由数不胜数。但你是否也曾问过这样的问题:Python和C或C等更专业的低级编程语言究竟有何不同呢?我想这是很多数据科学家或者Python用户曾经问过或者将来会问自己的问题。Python和C类语言之间存在许多区别,本…

Maven私有仓库、上传jar包、引用私服jar包、上传本地项目到私服_将已有jar包部署到私服

Maven私有仓库、上传jar包、引用私服jar包、上传本地项目到私服 搭建私有服务器 前面已经说过了,我们使用Maven的使用,如果需要导入相对应的jar包,Maven首先会在我们的本地仓库中寻找—>私有仓库—>中心仓库… 然而,我们…

java水泡_JAVA图像处理系列(八)——艺术效果:水泡

艺术效果水泡通过对图像进行变形或叠加其他图片,能够实现许多有趣的艺术效果,本文介绍类似水泡效果的实现方式,下面先看一下实现的效果。第一张为原始图像,第二张为叠加水泡效果的图像。cat.jpgcat_belb.jpg算法原理图像中的水泡效…

SpringBoot中调用第三方接口的三种方式

使用SpringBoot跨系统调用接口的方案 一、简介 项目开发中存在系统之间互调问题,又不想用dubbo,这里提供几种SpringBoot方案: 1、使用Feign进行消费(推荐) 2、使用原始httpClient请求 3、使用RestTemplate方法 二…

java读word_java读word文件(示例代码)

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。1.读取word 2003及word 2007需要的jar包读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi-3.5-beta6-20090622.jar 和 poi-scra…