java拓展接口_Java拓展接口-default关键词

Java接口在使用过程中有两点规定:

1、接口中只能有定义方法名、方法返回类型,不能有方法的实现。

2、实现接口的类,必须实现接口中所有的方法。

例如下面的例子:

//定义接口

public interface Action {

//接口中的方法定义,只能定义返回类型、方法名称

String say();

}

//接口的实现

public class ActionImpl implements Action {

@Override

public String say() {

return "Hello world!";

}

}

如果在接口中增加一个方法,会出现什么情况?这里增加一个sleep方法。

public interface Action {

String say();

String sleep();

}

我使用的是idea,在编辑器中已经提示出错了:必须要实现sleep方法。

6e1c1271766e8250a3f4319106319b99.png

基于接口使用规定中的第二点,一般是不能拓展接口的,拓展接口,则所有实现该接口的类都要实现新增加的接口。而实际工作中,根本不可能知道有哪些类实现了该接口,改动将是灾难性的。

如果确实要拓展接口呢?

Java 8中引入了一个新的概念,叫做default方法,也可以称为Defender方法,或者虚拟扩展方法(Virtual extension methods)。

default方法是指,在接口中可以定义包含具体实现的方法,这打破了Java之前版本对接口的语法限制。其他实现该接口的类不需要实现新增的default方法,默认就继承了该方法,同时也可以覆盖该方法。这样既拓展了接口,也不影响接口的实现类。

例如:

public interface Action {

String say();

//使用default关键词,使得接口中可以包含方法体

public default String sleep() {

return "I will go to sleep.";

}

}

其实现类不报错了,且已经继承了该方法,可以直接使用该方法。

public class TestAction {

public static void main(String[] args) {

Action action = new ActionImpl();

System.out.println(action.sleep());

}

}

在实现类中也可以覆盖该方法。

public class ActionImpl implements Action {

@Override

public String say() {

return "Hello world!";

}

@Override

public String sleep() {

return "sleeping";

}

}

总之,default使得接口可以有定义方法体,子类可以继承和覆盖default方法。可以用于拓展接口。

更详细的说明见:

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

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

相关文章

java编写通信录管理系统_Java 实现通讯录管理系统教程

本文实例为大家分享了java实现通讯录管理系统的具体代码,供大家参考,具体内容如下完成项目的流程:1.根据需求,确定大体方向2.功能模块分析3.界面实现4.功能模块设计5.coding6.代码测试下面是源代码:import java.awt.Co…

java姑娘_初识java这个小姑娘(二)

正版疯狂java讲义第5版编程教材76.5元(需用券)去购买 >妙解垃圾回收机制周一,早高峰!!!五个字,说尽心中的绝望!!!一段考验一个人耐力、智力、开车技术以及脾气的路。 我把车开进了…

JAVA script 循环 图片_深入分析JavaScript 事件循环(Event Loop)

事件循环(Event Loop),是每个JS开发者都会接触到的概念,但是刚接触时可能会存在各种疑惑。众所周知,JS是单线程的,即同一时间只能运行一个任务。一般情况下这不会引发问题,但是如果我们有一个耗时较多的任务&#xff0…

mysql update 跳过重复_MySQL通过UPDATE / DELETE整合重复的数据记录

我有一个看起来像这样的表:mysql> SELECT * FROM Colors;╔════╦══════════╦════════╦════════╦════════╦════════╦════════╦════════╗║ ID ║ USERNAME ║ RED ║ GREEN ║ YELLOW ║ …

java目录实用工具_JAVA 创建文件和文件夹,删除文件和文件夹的实用工具

package com.file;import java.io.File;import java.io.IOException;//创建新文件和目录public class CCRDFile {// 验证字符串是否为正确路径名的正则表达式private static String matches "[A-Za-z]:\\\\[^:?\">// 通过 sPath.matches(matches) 方法的返回值判…

java 方法重载的作业_java第六章 方法及方法重载 课堂笔记、作业

当参数传递为基本数据类型时,参数变化不保留,基本数据类型参数传值当参数传递为引用数据类型时,参数变化会保留,引用数据类型参数传址//基本数据类型在别处被重新赋值,则本体不受影响,其值不变//引用型数据…

java旋转图片后边上变黑_Java旋转图像将背景的一部分变成黑色

因此,我下载了“原始”图像(不是正方形),对其进行了修改,使其变为正方形,运行您的代码,得到了java.awt.image.ImagingOpException:无法转换src图像异常,将BufferedImage.TYPE_INT_RGB更改为BufferedImage .TYPE_INT_ARGB并得到…import java.awt.geom.AffineTransfo…

python 数据库连接池_【转】Python 数据库连接池

python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响。因此实际使用中,通常会…

python中location_使用python请求模块时的LocationValueError

我一直在使用请求包与Web进行交互,过去没有任何问题 . 最近当使用我大约一周没用过的脚本时,我在执行例程 requests.get() 调用时遇到以下错误:LocationValueError: No host specified.背景研究经过大量的谷歌搜索 python requests LocationV…

java 获取oracle表结构_获取Oracle中所有表的列表?

回答(19)2 years ago我们可以从以下查询获取所有表格,包括列详细信息:SELECT * FROM user_tab_columns;2 years ago使用sqlplus更好地查看如果您正在使用 sqlplus ,您可能需要首先设置一些参数以便在您的列被破坏时更好地查看(退出 sqlplus 会…

java后台处理excel_java后台利用Apache poi 生成excel文档提供前台下载示例

之前在项目中会用到在java在后台把数据填入Word文档的模板来提供前台下载,为了自己能随时查看当时的实现方案及方便他人学习我写了这篇博客,访问量已经是我写的博客里第一了。于是乎我在学会用Java在后台利用Apache poi 生成excel文档提供前台下载之后就…

java向有序数组里插数_Java向有序数组中插入一个元素,,使其仍按有序排列,并求出这个插入元素的下标...

/*** * create time [2014-4-13]*/public class Test{public static void main(String args[]){//原有序数组,这里约定数组是升序排列int[] intArray new int[]{1,2,4,6,7,9};int toInsert 8;//待插入数据int subscript 0;//下标//确定下标位置if(toInsert {subscript 0;}e…

php 删除文件夹及文件夹,php删除一个路径下的所有文件夹和文件的方法

php遍历一个文件夹内的所有文件和文件夹,并删除所有文件夹和子文件夹下的所有文件的代码,通过递归方式实现达到清空一个目录的效果,代码简单实用。也适合在thinkphp中清理缓存,在thinkphp中可以把下面代码写入./Application/Admin…

PHP制作订货,PHP生成订单号的两种方法

在开发项目的时候经常有生成订单号的需求&#xff0c;这里列出两种生成20位订单号的常用方法。方法一&#xff1a;以下代码是14位当前时间加6位随机数&#xff0c;如果增减位数&#xff0c;只需修改末尾的数字6即可。<?php Function build_order_no(){return date(YmdHis).…

php 分类排序,php将地区分类排序的算法

php将地区分类排序的算法介绍&#xff0c;有需要的朋友可以参考下。写一个函数&#xff0c;用来存储地区数据&#xff1a;复制代码 代码如下:$array array(0>array("","河北"),1>array("","北京"),2>array(0,"保定&quo…

js读写php文件,在js中如何读取本地文件

下面我就为大家分享一篇js读取本地文件的实例&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。如何用在浏览器端预览本地文件&#xff1f;今天的主题是使用浏览器预览本地文件。由于浏览器安全策略的限制&#xff0c;javascript程序不能自由地访问本地资源&…

php mvc教程 文档,PHP培训教程教你快速打造PHP MVC框架[PHP基础教程]

PHP培训教程教你快速打造PHP MVC框架[PHP基础教程]简介MVC框架在现在的开发中相当流行&#xff0c;不论你使用的是JAVA,C#,PHP或者IOS&#xff0c;你肯定都会选择一款框架。虽然不能保证100%的开发语言都会使用框架&#xff0c;但是在PHP社区当中拥有最多数量的MVC框架。今天你…

java分页代码思路,记录--java 分页 思路 (hibernate关键代码)

有时会脑袋蒙圈&#xff0c;记录下分页的思路下面代码是hibernate的分页&#xff0c;其分页就是从第几条数据为起点&#xff0c;取几条数据。比如在mysql中的limit(5,10)取的就是第6条到第10条在下面代码中的page是页数、size是每页多少条数据String hql"from User";…

php查看运行时间和内存,php 统计时间和内存的使用情况

跳至/*** 记录和统计时间(微秒)和内存使用情况* 使用方法:** G(begin); // 记录开始标记位* // ... 区间运行代码* G(end); // 记录结束标签位* echo G(begin,end,6); // 统计区间运行时间 精确到小数后6位* echo G(begin,end,m); // 统计区间内存使用情况* 如果end标记位没有定…

宝塔php漏洞,[安全预警]关于最近宝塔闹得很厉害的PMA漏洞BUG

文章前言在2020年8月23日的下午有个憨憨管理在我群艾特全员 说宝塔爆出漏洞了赶快更新吧&#xff01;影响机器需同时满足以下所有条件1、软件版本为Linux面板7.4.2 或者Windows面板6.8.02、开放888且未配置http认证&#xff0c;3、安装了phpmyadmin&#xff0c;mysql数据库不受…