Java8 接口的默认方法
来源:互联网 发布:吹笛子软件安卓版 编辑:程序博客网 时间:2024/05/27 21:49
使用方法
方法名前面加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
阅读全文
0 0
- Java8 接口的默认方法
- Java8接口的默认方法
- java8接口默认方法
- Java8 接口默认方法
- java8之接口的默认静态方法
- 浅谈JAVA8引入的接口默认方法
- Java8中接口的默认方法
- java8接口默认方法二
- Java8特性之接口的默认方法与静态方法
- java8新特性接口的默认方法和静态方法
- java8新特性接口的默认方法和静态方法
- Java8---2.函数接口的默认方法和静态方法
- 二、Java8的默认方法和静态接口方法
- java8 接口的默认方法和静态方法
- JAVA8新特性(接口的默认方法)
- JAVA8新特性(访问接口的默认方法)
- 找回过去之java8旧特性的接口默认方法
- 关于java8接口中默认方法的使用
- getopt()函数使用说明
- OkHttp使用完全教程
- 【Spring框架】<mvc:default-servlet-handler/>的作用
- 关于数据库分割及截取字符串
- spring boot 自定义Controller,不能被扫描
- Java8 接口的默认方法
- Yii Form表单提交时出现错误
- Vue2.0 探索之路——生命周期和钩子函数的一些理解
- HTML img标签之 onError onLoad onAbort 事件
- D
- ArangoDB入门教程(二)web端介绍
- 动态代理与AOP(4)
- ORACLE DataGuard 主备库角色切换
- jquery判断checkbox是否选中