Java8新特性interface中的static方法和default方法
static方法
java8中为接口新增了一项功能:定义一个或者更多个静态方法。用法和普通的static方法一样。
代码示例
public interface InterfaceA {
/**
* 静态方法
*/
static void showStatic() {
System.out.println("InterfaceA++showStatic");
}
}
测试
public class Test {
public static void main(String[] args) {
InterfaceA.show();
}
}
结果
InterfaceA++showStatic
注意,实现接口的类或者子接口不会继承接口中的静态方法
default方法
在接口中,增加default方法, 是为了既有的成千上万的Java类库的类增加新的功能, 且不必对这些类重新进行设计。 比如, 只需在Collection接口中
增加default Stream stream(), 相应的Set和List接口以及它们的子类都包含此的方法, 不必为每个子类都重新copy这个方法。
代码示例
实现单一接口,仅实现接口
public interface InterfaceA {
/**
* 静态方法
*/
static void showStatic() {
System.out.println("InterfaceA++showStatic");
}
/**
* 默认方法
*/
default void showDefault() {
System.out.println("InterfaceA ++showDefault");
}
}
/**先只实现这个接口
*/
public class InterfaceAImpl implements InterfaceA{
}
测试
public class Test {
public static void main(String[] args) {
InterfaceA.showStatic();
new InterfaceAImpl().showDefault();
}
}
结果
InterfaceA++showStatic
InterfaceA ++showDefault
如果接口中的默认方法不能满足某个实现类需要,那么实现类可以覆盖默认方法。
实现单一接口,重写接口中的default方法
public class InterfaceAImpl implements InterfaceA{
/**
* 跟接口default方法一致,但不能再加default修饰符
*/
@Override
public void showDefault(){
System.out.println("InterfaceAImpl++ defaultShow");
}
}
测试
public class Test {
public static void main(String[] args) {
InterfaceA.showStatic();
new InterfaceAImpl().showDefault();
}
}
结果
InterfaceA++showStatic
InterfaceAImpl++ defaultShow
实现多个接口,且接口中拥有相同的default方法和static方法
新创建个接口InterfaceB
/**
*/
public interface InterfaceB {
/**
* 静态方法
*/
static void showStatic() {
System.out.println("InterfaceB++showStatic");
}
/**
* 默认方法
*/
default void showDefault() {
System.out.println("InterfaceB ++showDefault");
}
}
如果不加重写方法就会报错,因为实现类不知道你使用的是哪个接口中的默认方法:
public class InterfaceAImpl implements InterfaceA,InterfaceB{
}
修改实现类
public class InterfaceAImpl implements InterfaceA,InterfaceB{
@Override
public void showDefault() {
System.out.println("InterfaceAImpl ++ showDefault");
}
测试结果
InterfaceA++showStatic
InterfaceAImpl ++ showDefault
总结
需要注意一点就是如果实现多个接口时,每个接口都有相同的default方法需要重写该方法。
Java8新特性interface中的static方法和default方法的更多相关文章
- java8新特性:interface中的static方法和default方法
java8中接口有两个新特性,一个是静态方法,一个是默认方法. static方法 java8中为接口新增了一项功能:定义一个或者多个静态方法. 定义用法和普通的static方法一样: public i ...
- Java8新特性(一)_interface中的static方法和default方法
什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...
- JS中的call()方法和apply()方法用法总结
原文引自:https://blog.csdn.net/ganyingxie123456/article/details/70855586 最近又遇到了JacvaScript中的call()方法和app ...
- JS中的call()方法和apply()方法用法总结(挺好 转载下)
最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...
- js中的splice方法和slice方法简单总结
slice:是截取用的 splice:是做删除 插入 替换用的 slice(start,end): 参数: start:开始位置的索引 end:结束位置的索引(但不包含该索引位置的元素) 例如: va ...
- Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机
1.今天在做数据库升级的时候,遇到一个问题,就是onCreate方法和onUpgrade方法的执行时机的问题,这个当时在操作的时候,没有弄清楚,很是迷糊,后来看了相关的博客由于转发受限所以copy了一 ...
- Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机--(转)
原文:http://blog.csdn.net/jiangwei0910410003/article/details/46536329 今天在做数据库升级的时候,遇到一个问题,就是onCreate方法 ...
- Mapper类/Reducer类中的setup方法和cleanup方法以及run方法的介绍
在hadoop的源码中,基类Mapper类和Reducer类中都是只包含四个方法:setup方法,cleanup方法,run方法,map方法.如下所示: 其方法的调用方式是在run方法中,如下所示: ...
- java 中的set方法和get方法的理解
get的意思是获取,set的意思是设置. get方法和set方法是实现类的封装访问的很好的工具. 当类中的变量设为private 时,他的意思就是说,只能通过自身和子类的访问,但是对于别的其他的类来说 ...
随机推荐
- python & MySQLdb(Three)
#实现python封装 # encoding=utf8 import MySQLdb #定义类 class MysqlHelper(): def __init__(self,host,port,db, ...
- 微信小程序开发指南
https://developers.weixin.qq.com/miniprogram/introduction/#%E4%BA%A7%E5%93%81%E5%AE%9A%E4%BD%8D%E5%8 ...
- C#调用WebService的简单方式
WebServiceCallpublic class WebServiceCall { public void Call() { string url = "http://localhost ...
- windows安装channels报错的解决方案
windows作为开发机真是让人又爱又恨,总是会遇到各种各样的问题 报错 以安装channels为例:如: pip install channels 时出现: error: Microsoft V ...
- 第2讲——wiz
PC端信息收集 网页剪藏 win+s 屏幕截图:win+printscreen微博收集:@mywiz @我的印象笔记 按ESC隐藏/恢复左边导航栏 F11全屏阅读 打标签:解决文件夹重叠问题 搜索 ...
- C++自动类型转化--特殊构造函数方法和重载的运算符方法
一.重载运算符法 #include <stdio.h> #include <iostream> class Three { int i; public: Three(, ) : ...
- .net缓存的应用研究(读篇)
目前,缓存主要有两种技术:分布式缓存和进程级别的内容缓存.两种缓冲具体的差异就不废话了. 1.在技术上 数据库降压的最好方式就是缓存.在缓存的性能上,进程级别的内存缓存性能有明显优于分布式缓存,内存缓 ...
- Java 接口 Comparable
compareTo方法是Comparable接口中唯一的方法.类实现了该接口后表明它的实例具有内在的排序关系.当该对象小于.等于或大于指定对象的时候,分别返回一个负整数.0或者正整数.如果由于指定对象 ...
- opencv+python 自动绿帽机
具体内容,直接看注释吧,该注释的我都注释掉了. # coding:utf-8 import cv2 # 待检测的图片路径 imagepath = r'D://greenhat//2.jpg' # 获取 ...
- MySQL匹配指定字符串的查询
MySQL匹配指定字符串的查询 使用正则表达式查询时,正则表达式可以匹配字符串.当表中的记录包含这个字符串时,就可以将该记录查询出来.如果指定多个字符串时,需要用“|”符号隔开,只要匹配这些字符串中的 ...