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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值