java default接口_Java default方法

本文介绍了Java中default方法的使用,展示了如何在不改变既有代码的情况下为接口添加新功能,并探讨了当多个接口同时定义默认方法时的冲突解决策略。通过实例演示了如何在Main类中重写接口冲突的方法以确保正确执行。
摘要由CSDN通过智能技术生成

1.前言 今天在Iterable接口中看见了一个“新方法”forEach,在它的前面有个default关键字。所以特意查了下它的用法。

2.示例与说明 下面是一个小例子:

public class Main implements B{ public static void main(String[] args) {

@Override

public void run() {

System.out.println("I'm running...");

}

interface B{ public void run();

}

在上面的例子中,Main类实现了接口B中的run方法。现在我们想在接口B中增加一个方法,但是又不影响到Main类,这时就要用到default方法了。 修改接口B如下:

interface B{

public void run();

default public void sleep(){

System.out.println("I'm sleep…");

}

}

我们在接口B中增加了一个sleep方法,在Main类里不需要修改任何代码。如果去掉default,那么就需要在所有实现了接口B的类中增加相应sleep方法的实现。 接口中有了default方法后,与抽象类更像了。(个人观点) 这样一来就有了一个问题,请看下面的例子:

public class Main implements B, C {

public static void main(String[] args) {

}

@Override

public void run() {

System.out.println("I'm running...");

}

}

interface B {

public void run();

default public void sleep() {

System.out.println("I'm sleep...");

}

}

interface C {

default public void sleep() {

System.out.println("I'm sleep in C…");

}

}

Main类既实现了接口B又实现了接口C,现在接口B和接口C中都有一个sleep方法。 这时就会报下面的错误:

Duplicate default methods named sleep with the parameters () and () are inherited from the types C and B

解决方法也很简单,在Main类中重写sleep方法即可。

public class Main implements B, C {

public static void main(String[] args) {

}

@Override

public void run() {

System.out.println("I'm running...");

}

@Override

public void sleep() {

B.super.sleep();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值