JDK8新特性之默认方法

        在Java开发过程中,我们应该遇到过这样的情景:起初,有人定义了一个接口,并声明了一些方法,许多人对该接口进行了不同的实现。随着需求的增加,有人又在该接口中增加了一个方法。对于大多数需要该方法的人来说,修改自己的类并不成问题。然而,对于少数不需要该方法的人来说,他们也不得不跟着修改类,这样不仅增加了工作量,还提高了出错的可能性。JDK8引入了默认方法,可以解决这个问题。

        默认方法在接口中定义,可以有多个,使用'default'关键字修饰,必须有方法体。比如我很应景的定义了一个名为GaoKao的接口和一个默认方法biSheng,祝各位学子,高考必胜!

/**
 * 接口:高考
 */
public interface GaoKao {

    /**
     * 默认方法: 必胜
     */
    default void biSheng() {
        System.out.println("祝愿各位学子,高考必胜!!");
    }
}

        子接口(或实现类)会悄悄继承(或实现?)接口中的默认方法。所以,在你的实现类中,即使你不重写接口中的默认方法,你也可以直接调用。

public class GaoKaoImpl implements GaoKao{
  
    public static void main(String[] args) {
      //直接调用
        new GaoKaoImpl().biSheng();
    }
}

        如果你需要继承一个有默认方法的接口,你有几种选择:

               1. 忽略默认方法:满足需求或者根本用不到;

               2. 重新声明默认方法,并去掉'default'修饰符:废掉默认方法,子接口的实现类必须重写该方法;

                3. 重写默认方法:用到,但是不满足需求,需要重写逻辑。

        除了默认方法之外,我们还可以在接口中定义静态方法。接口中的静态方法,需要通过接口去调用。如果有需要,实现类中可以重写静态方法为静态或非静态的。

/**
 * 接口:高考
 */
public interface GaoKao {
    /**
     * 默认方法: 必胜
     */
    default void biSheng() {
        System.out.println("祝愿各位学子,高考必胜!!");
    }
  
    /**
     * 静态方法: 加油
     */
    static void jiaYou() {
        System.out.println("各位学子,高考加油!!");
    }
}

public class GaoKaoImpl implements GaoKao {
    
    public static void main(String[] args) {
        new GaoKaoImpl().biSheng();
        GaoKao.jiaYou(); //通过接口直接调用静态方法
        //new GaoKao().jiaYou(); 通过类调用接口静态方法,是不可以的
    }
}

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值