jdk8新特性-2、接口的默认方法与静态方法

接口的默认方法

Java 8用默认方法与静态方法这两个新概念来扩展接口的声明。默认方法使接口有点像Traits(Scala中特征(trait)类似于Java中的Interface,但它可以包含实现代码,也就是目前Java8新增的功能),但与传统的接口又有些不一样,它允许在已有的接口中添加新方法,而同时又保持了与旧版本代码的兼容性。

默认方法与抽象方法不同之处在于抽象方法必须要求实现,但是默认方法则没有这个要求。相反,每个接口都必须提供一个所谓的默认实现,这样所有的接口实现者将会默认继承它(如果有必要的话,可以覆盖这个默认实现)。让我们看看下面的例子:

1、默认方法必须有方法体

2、默认方法无需事先,可以直接调用,也可以背重写

public interface Defaultable {
    default String defaultMethod1() {
        return "这是Defaultable接口的默认defaultMethod1方法";
    }
    default String defaultMethod2() {
        return "这是Defaultable接口的默认defaultMethod2方法";
    }
}

class DefaultClass implements Defaultable{
    @Override
    public String defaultMethod2() {
        return "这是DefaultClass类的默认defaultMethod2方法;";
    }
}

public class NewCharacter {
    public static void main(String[] args) {
        DefaultClass defaultClass = new DefaultClass();
        String s1 = defaultClass.defaultMethod1();
        String s2 = defaultClass.defaultMethod2();
        System.out.println(s1);
        System.out.println(s2);
    }
}

在JVM中,默认方法的实现是非常高效的,并且通过字节码指令为方法调用提供了支持。默认方法允许继续使用现有的Java接口,而同时能够保障正常的编译过程。这方面好的例子是大量的方法被添加到java.util.Collection接口中去:stream(),parallelStream(),forEach(),removeIf(),……

接口的静态方法

Java 8带来的另一个有趣的特性是接口可以声明(并且可以提供实现)静态方法。例如:

1、静态方法必须有方法体

2、静态方法不能够被重写

3、静态方法只能被定义接口静态调用

不能通过接口的实现类调用

不能通过实现类的对象调用

只能通过接口类静态调用

public interface Staticable {
    static String statictMethod1() {
        return "这是Staticable接口的默认statictMethod1方法";
    }
}

public class NewCharacter {
    public static void main(String[] args) {
        String s1 = Staticable.statictMethod1();
        System.out.println(s1);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值