java 接口方法默认_JAVA8学习5-接口默认方法(default)

5 接口默认方法

在 java8 之后,我们可以在接口中写默认实现方法。使用关键字 default 定义默认接口实现 在 java8 中,接口引入默认方法是为了什么: 为了能保证向后兼容。   现在对接口默认方法的几种情况进行说明。

5.1 一个类实现一个默认实现方法的接口

首先我们定义一个接口

package cn.zxhysy.jdk8.dufaultmethod;

public interface MyInterface {

default void myMethod() {

System.out.println("myInterface1");

}

}

定义一个类,实现该接口调用接口默认方法。

package cn.zxhysy.jdk8.dufaultmethod;

public class MyClass implements MyInterface {

public static void main(String[] args) {

MyClass myClass = new MyClass();

//实体类可以直接调用。

myClass.myMethod();

}

}

5.2 一个类实现两个接口,且接口的默认方法名一直

这里我们在上面的基础上,再定义一个接口为 myInterface2

package cn.zxhysy.jdk8.dufaultmethod;

public interface MyInterface2 {

default void myMethod(){

System.out.println("myInterface2");

}

}

这时我们就不可一直用基类来直接调用方法,因为会报错,说有多个接口的默认方法名一致,需要我们重写方法。

package cn.zxhysy.jdk8.dufaultmethod;

public class MyClass  implements MyInterface,MyInterface2 {

@Override

public void myMethod(){

//todos...

// 也可以用某个接口的默认方法。

MyInterface2.super.myMethod();

}

public static void main(String[] args) {

MyClass myClass = new MyClass();

myClass.myMethod();

}

}

如果我们要保留或者用某个接口的默认方法,只需要在覆盖方法的时候,用接口名.super.方法名,就如上面代码:

@Override

public void myMethod(){

//todos...

// 也可以用某个接口的默认方法。

MyInterface2.super.myMethod();

}

5.3 一个类实现另一个类和接口,其中另一个类和接口中的默认方法名字一直。

这里我们就用另一个类 MyInterfaceImpl 来实现 MyInterface 接口,用 MyClass 来继承该类,和实现 MyInterface2 接口。

package cn.zxhysy.jdk8.dufaultmethod;

public class MyInterfaceImpl implements MyInterface{

@Override

public void myMethod(){

System.out.println("myInterfaceImpl");

}

}

package cn.zxhysy.jdk8.dufaultmethod;

public class MyClass extends MyInterfaceImpl implements MyInterface2 {

public static void main(String[] args) {

MyClass myClass = new MyClass();

myClass.myMethod();

}

}

结果中,没报错,默认情况下,默认使用的是 实现类中的方法,而不会使用接口中的默认方法。打印了 myInterfaceImpl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值