您的位置:首页 > 编程语言 > Java开发

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

2019-04-15 15:24 120 查看

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐