Java8 接口的默认方法
2017-10-09 17:17
169 查看
使用方法
方法名前面加default关键字public interface Lived { default String getDescription() { return "有生命的"; } }
接口的静态方法
java8中允许接口中定义静态方法public interface Lived { static boolean instanceOf(Object obj) { return obj instanceof Lived; } }
继承问题
如果有多个重载的方法,先按照重载规则来选取最精确原则:选取类型匹配,且在继承树最靠近叶子节点的类型
如果选定的方法,有多个重写的版本(签名完全相同),则按照下面规则选取
一个声明在类里面的方法优先于任何默认方法(classes always win)
优先选取最具体的实现( 继承树的最靠近叶子节点)
多重继承
如果某个方法存在“菱形继承”,必须显式重写
新语法:用某个接口的默认实现
return Lived.super.getDescription();
重载相关的问题
最精确原则
package com.javapapaer.java; public class NullArguementOverloading { public static void main(String[] args) { NullArguementOverloading obj = new NullArguementOverloading(); obj.overLoad(null); } private void overLoad(Object o){ System.out.println("Object o arguement method."); } private void overLoad(double[] dArray){ System.out.println("Double array argument method."); } private void overLoad(String str) { System.out.println("String argument method."); } }
main函数obj.overLoad(null)那一行会编译报错。String的 overLoad和double[]的overLoad都可以匹配,但是两者在继承属上是平行的,因此编译器也不知道到底该调用哪一个重载方法。
重载是编译期的行为,与多态无关
import java.util.ArrayList; import java.util.List; public class OverridePuzzle { private void overloadList(List list){ System.out.println("List arguement method."); } private void overloadList(ArrayList arrayList){ System.out.println("ArrayList arguement method"); } public static void main(String[] args) { OverridePuzzle op = new OverridePuzzle(); List list = new ArrayList<String>(); op.overloadList(list); } }
程序输出:List arguement method
参考:Java8学习之默认方法
参考:Java 重写(Override)与重载(Overload)
参考:深入理解重载和重写及与之相关的多态性 Overloading and Overriding
相关文章推荐
- Java8新特性--Interface中的default方法(接口默认方法)
- Java8新特性——接口的默认方法(扩展方法)
- java8之接口的默认静态方法
- Java 8 接口里的默认方法特性研究
- java8接口默认方法
- Java8特性之接口的默认方法与静态方法
- Java8接口中的默认方法
- Java 8 - Interface Default Method接口默认方法
- Java8新特性 - 默认接口方法
- java中接口的属性、方法的默认修饰符和类的属性、访问修饰符的区别
- java接口的方法默认都是public abstract类型
- Java接口中属性和方法的默认修饰符
- Java8 新特性之默认接口方法
- JAVA8新特性(接口的默认方法)
- Java 8 接口里的默认方法特性研究
- Java 8th 新特性:默认接口方法
- Java8新特性——接口的默认方法和类方法
- JAVA8新特性(访问接口的默认方法)
- Java8接口的默认方法
- 30分钟入门Java8之默认方法和静态接口方法