JDK8新增接口的默认方法与静态方法
JDK8之前,interface中可以定义常量和抽象方法,访问修饰符是public。
public interface A {
/** a1和a2写法是等价的 */
public static final int a1 = 0;
int a2 = 0;
/** methodA1和methodA2写法是等价的 */
public abstract void methodA1();
void methodA2();
}
JDK8起,允许我们在interface中使用static和default修饰方法(使用这两种修饰符中其一就不能使用abstract修饰符),从而方法具有方法体。
public interface A {
/** default访问修饰符修饰的方法 */
default void methodB1() {
System.out.println("this is default method");
}
/** static修饰符修饰的方法 */
public static void methodB2() {
System.out.println("this is static method");
}
}
default修饰的方法,通过接口的实现类的对象调用;static修饰的方法,直接通过接口名调用。
public class Test implements A{
public static void main(String[] args) {
/** 接口的default方法,通过接口的实现类的对象调用 */
Test test = new Test();
test.methodB1();
/** 接口的静态方法,通过接口名调用 */
A.methodB2();
}
}
由于java支持一个实现类可以实现多个接口,如果多个接口中存在同样的static和default方法会怎么样呢?
- 如果有两个接口中的static方法一模一样,并且实现类同时实现了这两个接口,此时并不会产生错误,因为jdk8只能通过接口类调用接口中的静态方法,所以对编译器来说是可以区分的。
- 如果两个接口中定义了一模一样的default方法,并且一个实现类同时实现了这两个接口,那么必须在实现类中重写默认方法,否则编译失败。
public interface A {
/** default访问修饰符修饰的方法 */
default void methodB1() {
System.out.println("this is default method -- InterfaceA");
}
/** static修饰符修饰的方法 */
public static void methodB2() {
System.out.println("this is static method -- InterfaceA");
}
}
public interface B{
/** default访问修饰符修饰的方法 */
default void methodB1() {
System.out.println("this is default method -- InterfaceB");
}
/** static修饰符修饰的方法 */
public static void methodB2() {
System.out.println("this is static method -- InterfaceB");
}
}
public class Test implements A,B{
/** 由于A和B中default方法一样,所以这里必须覆盖 */
@Override
public void methodB1() {
System.out.println("this is Overriding methods");
}
public static void main(String[] args) {
/** 接口的default方法,通过接口的实现类的对象调用 */
Test test = new Test();
test.methodB1();
/** A接口的静态方法,通过接口名调用 */
A.methodB2();
/** B接口的静态方法,通过接口名调用 */
B.methodB2();
}
}
运行结果:

参考:https://blog.csdn.net/aitangyong/article/details/54134385
JDK8新增接口的默认方法与静态方法的更多相关文章
- jdk8系列一、jdk8 Lamda表达式语法、接口的默认方法和静态方法、supplier用法
一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性. 在本文中我们将学习这些新特性,并用实际 ...
- java8-新特性--(接口的默认方法与静态方法)
Java 8用默认方法与静态方法这两个新概念来扩展接口的声明. public interface Inte{ void method(); default void defaultMethod(){ ...
- java8新特性:接口的默认方法与静态方法
接口中一共可以定义三种方法: 1.抽象方法,也就是需要实现者必须实现的方法,最常见的那种 2.默认方法,不需要实现者实现 3.静态方法,不需要实现者实现 默认方法: 允许在已有的接口中添加新方法,而同 ...
- JDK8.0接口中的默认方法和静态方法
我们在接口中通常定义的方法是抽象方法,即没有方法体,只有返回值类型和方法名:(public abstract) void Method(); 类在实现接口的时候必须重写抽象方法才可以 jdk8中新加的 ...
- JDK8新特性之接口默认方法与静态方法
接口默认方法与静态方法 有这样一些场景,如果一个接口要添加一个方法,那所有的接口实现类都要去实现,而某些实现类根本就不需要实现这个方法也要写一个空实现,所以接口默认方法就是为了解决这个问题. 接口静态 ...
- JAVA_接口_默认方法&静态方法
1.小结(注意): 1.接口中无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰 2.接口中,没有构造方法,不能创建对象 3.接口中,没有静态代码块 ...
- Java8新特性之四:接口默认方法和静态方法
在JDK1.8以前,接口(interface)没有提供任何具体的实现,在<JAVA编程思想>中是这样描述的:"interface这个关键字产生了一个完全抽象的类,它根本就没有提供 ...
- Java 8 接口中的默认方法与静态方法
Java 8 接口中的默认方法与静态方法 1. 接口中的默认方法 允许接口中包含具有具体实现的方法,该方法称"默认方法",默认方法使用用 default 关键字修饰. public ...
- Java8新特性Optional、接口中的默认方法与静态方法
Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...
随机推荐
- MySQL遇到Deadlock found when trying to get lock,解决方案
最近遇到一个MYSQL update语句出现Deadlock found when trying to get lock的问题,分析一下原因. 什么情况下会出现Deadlock found when ...
- [转]Kqueue与epoll机制
首先介绍阻塞与非阻塞:阻塞是个什么概念呢?比如某个时候你在等快递,但是你不知道快递什么时候过来,而且你没有别的事可以干(或者说接下来的事要等快递来了才能做):那么你可以去睡觉了,因为你知道快递把货送来 ...
- 我的2018:OCR、实习和秋招
真的是光阴似箭,好像昨天还沉浸在考研成功的喜悦,今天却要即将步入2019年,即将硕士毕业.老规矩,还是在每一年的最后一天总结今年以及展望明年.回首2018,经历的东西特别多,视野也开阔了不少,可以说, ...
- xorm中的几个坑
项目中使用的是xorm,虽然用了很顺手了,可是还是会遇到一些坑,这里纪录一些. 结构体自动忽略空字段 在xorm中,结构体会自动忽略空字段(或则说默认值,比如int 的0 ,string的" ...
- surface shader获取像素深度差值
void vert (inout appdata_full v, out Input i) { UNITY_INITIALIZE_OUTPUT(Input, i); i.proj = ComputeS ...
- CentOS安装和配置Mysql
1. Centos 默认的yum 是没有Mysql5.7 所以需要配置下,从官网获取最新的RPM包 在MySQL官网中下载YUM源rpm安装包:https://dev.mysql.com/downlo ...
- 本人AI知识体系导航 - AI menu
Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯 徐亦达老板 Dirichlet Process 学习 ...
- postgresql修改数据库编码
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'your_database'; 先用 \e ...
- Xshell正编辑文件时掉线,需再次正常编辑解决办法
E325: ATTENTION Found a swap file by the name ".weather.py.swp" owned by: pi dated: Mon No ...
- H - Expedition 优先队列 贪心
来源poj2431 A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being ...