JDK8新特性 接口的变化--默认方法和静态方法

本文主要是简单的说明下jdk8出现的一个新特性–接口的增强。此次变化中,接口中某些方法也可以有方法体了。jdk8对于接口的设计,除了保留之前的版本记本特性外,还提供了两个新的功能。除了抽象方法外,还可以有默认方法(default方法)和静态方法(static方法),此两个方法都可以拥有方法体

新特性:默认方法 和 静态方法

在接口中用default关键字修饰的,可以拥有方法体的函数,成为默认方法或者扩展方法
同时在接口中可以使用static修饰一个拥有方法体的函数,就是接口中也可以有静态方法啦
如下:

public interface JDK8NewInterface {

    //1.默认方法
    default void testDefault()
    {
        System.out.println("I'm interface's default function");
    }

    //2.静态方法
    static void testStatic()
    {
        System.out.println("I'm interface's static function");
    }

}
简单应用

1.默认方法和静态方法不需要一定在实现类中去重写它们,当然,你也可以根据需要重写他们

public class JDK8NewInterfaceImpl implements JDK8NewInterface {

    //默认方法不一定需要重写,你也可以根据需要重写

}

2.当实现类继承多个接口时,如果继承的接口中拥有相同的默认方法和静态方法时,我们需要重写默认方法,而不需要重写静态方法。因为静态方法可以通过类名直接调用,编译器可以区分出来;而默认方法需要对象调用,当实现类继承两个接口中有相同的默认方法时,导致编译失败而导致实现类必须重写此默认方法

public interface JDK8NewInterface2 {
    //1.默认方法
    default void testDefault()
    {
        System.out.println("I'm interface2's default function");
    }

    //2.静态方法
    static void testStatic()
    {
        System.out.println("I'm interface2's static function");
    }
}

//接口JDK8NewInterface和JDK8NewInterface2中都有testDefault,testStatic方法
public class JDK8NewInterfaceImpl implements JDK8NewInterface, JDK8NewInterface2 {

    //默认方法不一定需要重写,但实现的两个接口中有相同的默认方法时,就需要重写
    public void testDefault()
    {
        System.out.println("I'm interfaceImpl's default function");
    }
}

通过上述实践,我们可以发现在接口中可以定义方法,可以在不破坏原来的实现这个类的所有类的原有结构,是在没有打破现有的继承体系的基础上实现了接口增强。而此次推出的这个新方法,已在现有的java.util.Collection中添加了一些新的默认方法,比如这次新特性中推出的新的默认方法forEach(),steam()等。不过,不推荐用默认方法,我也没有详细去了解,不过要是你去设计api的一些接口设计和架构设计,可以深入了解下。

问题探讨

接口中不能用默认方法重写toString/hashCode/equals方法呢?toString等方法是Object对象的,我们知道java中所有对象都是继承自Object对象,所以Object对象中有了toString对象的一般方法,而有个前提一个类实现了具体的一个实现方法,永远优先于默认方法的执行。由于任何接口也因为是Object的一个“子类”,都因此有了toString方法的一个非默认的实现,你再去给接口默认重写toString方法,实际上还是不会执行,而去执行Object父类的toString的非默认实现,显然,在接口中用default关键字去重写Object中toString等方法是没有意义的,所以,编译时就不能通过的。

由于新接口变化后,接口和抽象的异同显然也是有所变化,当面试再次问起时,应该注意JDK版本的变化,在这里就不列出其异同了。由于本人java水平有限,错误之处望指正

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值