java8新特性——接口中的静态方法与默认方法
2018-06-03 14:17
344 查看
以前我们知道,接口中的方法必须时抽象方法,而从 java8 开始接口中也可以有方法的实现了,叫做默认方法。
一 、默认方法(default修饰)
在 java8 中,因为存在函数式接口,一个接口中只能存在一个普通方法,但是可以写多个默认方法,来为实现类提供方法实现。
1 public interface MyInterface { 2 3 /** 4 * 默认方法 5 * @return 6 */ 7 default String getName () { 8 return "张三"; 9 } 10 11 default String getAge () { 12 return "13"; 13 } 14 15 /** 16 * 普通方法 17 * @return 18 */ 19 String getHome (); 20 }
既然接口中可以写方法的实现,那么就会出现与父类之间进行冲突的问题。
1 public class MyClass { 2 3 public String getName () { 4 return "李四"; 5 } 6 }
上面的类中同样存在一个方法 getName 如果有一个类即实现 MyInterface 的接口, 又继承 MyClass 的类,那么这个类的 geName 方法到底使用接口中的还是父类中的呢?
1 public class My_JAVA8_Test extends MyClass implements MyInterface{ 2 3 public static void main(String[] args) { 4 My_JAVA8_Test test = new My_JAVA8_Test(); 5 System.out.println(test.getName()); 6 } 7 8 9 @Override 10 public String getHome() { 11 return null; 12 } 13 14 }
答案是“李四”,因为,这里有一个类优先的原则:
若一个接口中定义了一个默认方法,而另一个父类中又定义了一个同名方法时,选择父类中的方法。如果一个父类提供了具体的实现,那么接口中具有相同名称和参数的默认方法会被忽略。
如果,此时,我们再定义一个接口,里面也有一个方法叫做getName,而一个类去同时实现这两个接口。那么这个类的 getName 方法到底会执行哪一个呢?
1 public interface MyFun { 2 3 default String getName () { 4 return "王五"; 5 } 6 }
1 public class My_JAVA8_Test implements MyInterface, MyFun{ 2 3 public static void main(String[] args) { 4 My_JAVA8_Test test = new My_JAVA8_Test(); 5 System.out.println(test.getName()); 6 } 7 8 9 @Override 10 public String getHome() { 11 return null; 12 } 13 14 /** 15 * 此时,类会让我们自己去重写,也可以自己选择使用上面2个接口中的方法 16 */ 17 @Override 18 public String getName() { 19 return MyFun.super.getName(); 20 } 21 22 }
此时,类会让我们自己去重写,也可以自己选择使用上面2个接口中的方法
若一个接口中定义了一个默认方法,而另外一个接口中又定义了一个同名方法时,接口冲突。不管是否是默认方法,那么必须覆盖该方法来解决冲突。
二、静态方法
在 java8 中的接口中不仅增加了默认方法,还增加了静态方法。使用方式接口名.方法名。
1 public interface MyFun { 2 3 default String getName () { 4 return "王五"; 5 } 6 7 static void test () { 8 System.out.println("测试接口中静态方法!"); 9 } 10 }
1 public static void main(String[] args) { 2 MyFun.test(); 3 4 }
相关文章推荐
- Java8新特性总结 - 1.接口新增默认方法和静态方法
- java8新特性接口的默认方法和静态方法
- Java8新特性之接口的默认方法和静态方法
- Java8 新特性之二---------接口的默认方法和静态方法
- java8-新特性--(接口的默认方法与静态方法)
- Java8特性之接口的默认方法与静态方法
- Java8新特性Optional、接口中的默认方法与静态方法
- Java8中新特性Optional、接口中默认方法和静态方法详解
- Java8新特性之接口中的默认方法与静态方法
- Java8新特性 接口默认方法,接口静态方法
- Java8学习笔记 — 其它新特性【接口默认方法(静态方法)、重复注解、类型注解】
- java8新特性之接口默认方法&静态方法
- Java8新特性Optional、接口中的默认方法与静态方法
- java8新特性——接口中的静态方法与默认方法
- Java8新特性之接口的默认方法和静态方法
- Java 8 新特性:接口的静态方法和默认方法
- Java 8 新特性:接口的静态方法和默认方法
- Java8新特性 - 默认接口方法
- Java8---2.函数接口的默认方法和静态方法
- 30分钟入门Java8之默认方法和静态接口方法学习