jdk1.8新特性之default关键字

本文围绕Java8中default关键字展开。介绍其是虚拟扩展方法,让接口可含方法体,扩展时不破坏实现类代码。阐述引入原因是避免修改接口时改动所有实现类。还说明了使用方式,如继承实现接口等,同时提醒实际开发中应谨慎使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  今天学习集合源码时,在Iterable接口中发现default关键字。

是什么?

  default是在java8中引入的关键字,也可称为Virtual extension methods——虚拟扩展方法。

  是指,在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。

为什么要?

  之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类。

  默认方法使得开发者可以在不破坏二进制兼容性的前提下,往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这个新加的方法。

  二进制兼容性:所谓“二进制兼容性”指的就是在升级(也可能是 bug fix)库文件的时候,不必重新编译使用这个库的可执行文件或使用这个库的其他库文件,程序的功能不被破坏。

怎么用?

  1、继承接口,实现接口

public interface Interface1{
    default void helloWorld() {
        System.out.println("Interface1");
    }
}
public class MyImplement implements Interface1{
    public static void main(String[] args) {
        MyImplement myImplement = new MyImplement();
        //直接调用helloWorld()方法
        myImplement.helloWorld();
    }
}

  2、同时实现两个有同名默认方法的接口

public interface Interface2{
    default void helloWorld() {
        System.out.println("Interface2");
    }
}
/**
 * 实现接口Interface1,Interface2
 */
public class MyImplement implements Interface1,Interface2{
    public static void main(String[] args) {
        MyImplement myImplement = new MyImplement();
        //直接调用helloWorld()方法
        myImplement.helloWorld();
    }
}

  报错,不知道该调用哪个方法。解决办法:在实现类中重写该方法。

  3、类优于接口

public class MyImplement2 extends MyImplement implements Interface2{

    public static void main(String[] args) {
        MyImplement2 myImplement2 = new MyImplement2();
        myImplement2.helloWorld();
    }

}

  会调用父类方法。

 

注:1、jdk8.0中允许接口中使用静态方法。

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

转载于:https://www.cnblogs.com/lc4j/p/11069172.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值