Java 8新特性之三-接口的默认方法和静态方法

1,默认方法的用途,例子如下:



interface DefaultInterface {
void printHello();
default String defaultMethod() {
return "DefaultFunction()";
}
}


class ClassImpl implements DefaultInterface{


@Override
public void printHello() {
System.out.println("Hello");

}
}


class ClassTwoImpl implements DefaultInterface{


@Override
public void printHello() {
System.out.println("Hello world!");

}
public String defaultMethod() {
return "ClassTwoImpl Function()";
}

}
public class FunctionInterface{
public static void main(String[] args) {
ClassImpl impl=new ClassImpl();
System.out.println(impl.defaultMethod());
impl.printHello();
ClassTwoImpl classT=new ClassTwoImpl();
System.out.println(classT.defaultMethod());
classT.printHello();
}
}

如上面的例子所示,default修改的方法就是默认方法,默认方法不需要子类实现,但是子类可以直接使用;

子类也可以选择重写这个默认方法,这样的操作也是可以得


2,静态方法的用法,如下图:

import java.util.function.Supplier;


interface DefaulableFactory {
static DefaultInterface create(Supplier<DefaultInterface> supplier) {
return supplier.get();
}
}
public class Test {
public static void main(String[] args) throws InterruptedException {
DefaultInterface defaulable = DefaulableFactory.create(ClassImpl::new);
System.out.println(defaulable.defaultMethod());
defaulable = DefaulableFactory.create(ClassTwoImpl::new);
System.out.println(defaulable.defaultMethod());
}

}

由于JVM上的默认方法的实现在字节码层面提供了支持,因此效率非常高。默认方法允许在不打破现有继承体系的基础上改进接口。该特性在官方库中的应用是:给java.util.Collection接口添加新方法,如stream()parallelStream()forEach()removeIf()等等。

尽管默认方法有这么多好处,但在实际开发中应该谨慎使用:在复杂的继承体系中,默认方法可能引起歧义和编译错误。


本文一些观点转自 https://blog.csdn.net/u014470581/article/details/54944384




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值