Java8新特性-003-Java8接口中的默认方法与静态方法
2017-12-26 本文已影响0人
53b3f4658edc
Java 8中允许接口中包含具有具体实现的方法,该方法称为“默认方法”,默认方法使用default 关键字修饰。
微信公众号:JavaWeb架构师
接口默认方法的”类优先”原则
若一个接口中定义了一个默认方法,而另外一个父类或接口中又定义了一个同名的方法时:
- 选择父类中的方法。如果一个父类提供了具体的实现,那么接口中具有相同名称和参数的默认方法会被忽略。
- 接口冲突。如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(不管方法是否是默认方法),那么必须覆盖该方法来解决冲突
接口中的静态方法
Java8 中,接口中允许添加静态方法。
微信公众号:JavaWeb架构师
测试代码
package java8._interface;
import org.junit.Test;
public class TestInterfaceDefaultStaticMethod {
/*
*1.默认方法:
* 1.1.Java 8中允许接口中包含具有具体实现的方法,该方法称为“默认方法”,默认方法使用default 关键字修饰。
* 1.2.接口默认方法的”类优先”原则:
* 1.2.1.接口默认方法与类方法冲突时(方法名、参数列表相同):优先选择类方法 。
* 1.2.2.两个接口中的默认方法冲突时(方法名、参数列表相同),必须重写以解决。
*2.静态方法:
* 2.1.Java 8中允许接口中包含有静态方法。
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 1.1.认识接口中的默认方法
@Test
public void test1() {
MyInter1 m = () ->System.out.println("你好,我是公有抽象方法!");
m.method2();
m.method1();
}
/*
* 结果:
* 我是默认方法,在定义接口的时候就实现了!
* 你好,我是公有抽象方法!
*/
/*
* 曾经的接口:
* 1.允许公有静态产量存在。
* 2.允许共有抽象方法存在。
*/
interface MyInter1 {
// 1.共有静态常量。
public static final int LENGTH = 10;
// 2.公有抽象方法。
public abstract void method1();
// 3.jdk 1.8新增的默认方法:使用default关键字修饰;在定义接口时就实现;后面可以直接调用;不影响函数式接口。
default void method2() {
System.out.println("我是默认方法,在定义接口的时候就实现了!");
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 2.解决类冲突:类优先
@Test
public void test2() {
// 继承的类与实现的接口中的默认方法冲突时,默认使用类中方法。
new MyClass2().method2();
}
/*
* 结果:
* 我是类中的方法!
*/
class MyClass1 {
public void method2() {
System.out.println("我是类中的方法!");
}
}
class MyClass2 extends MyClass1 implements MyInter1 {
@Override
public void method1() {
System.out.println("实现接口中没有实现的方法!");
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 3.解决接口冲突:重写方法。
@Test
public void test3() {
new MyClass3().method2();
}
/*
*结果:
* 接口中默认方法冲突,通过重写解决!
*/
interface MyInter2 {
default void method2() {
System.out.println("我是接口2中的默认方法!");
}
}
class MyClass3 implements MyInter1,MyInter2 {
@Override
public void method2() {
System.out.println("接口中默认方法冲突,通过重写解决!");
}
@Override
public void method1() {
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 4.接口中的静态方法
@Test
public void test4() {
MyInter3.display();
}
/*
* 结果:
* 接口中的静态方法!
*/
interface MyInter3 {
// Java 8中可以在接口中定义静态方法
public static void display() {
System.out.println("接口中的静态方法!");
}
}
}
微信公众号:JavaWeb架构师
其它
- 源码下载
关注下方公众号,回复:Java8.code
-
欢迎加入交流群:451826376
-
更多信息:www.itcourse.top