Java8 接口的默认方法

使用方法

方法名前面加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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值