JDK8新特性之接口的静态方法和默认方法

个人博客:www.letus179.com

JDK8之前我们在接口中定义成员变量只能是public static final的,定义的成员方法只能是public abstract的,默认省略。JDK8前后这一概念等价。定义接口BeforeJDK8Interface如下:
namename1表述等价,getName()getName1()表述等价。

public interface BeforeJDK8Interface {

    String name = "BeforeJDK8Interface";

    //public、 static、 final 可以单独使用,也可以组合使用
    public static final String name1 = "BeforeJDK8Interface";

    void getName();

    //public、 abstract 可以单独使用,也可以组合使用
    public abstract void getName1();

}

JDK8新增特性,允许我们在接口中定义default默认方法static静态方法。定义接口JDK8Interface如下:

public interface JDK8Interface {

    default void myDefaultMethod() {
        System.out.println("JDK8新特性:接口中的默认方法");
    }

    static void myStaticMethod() {
        System.out.println("JDK8新特性:接口中的静态方法");
    }

}

实现接口时,这里static方法由于static的原因,属于接口类,只能通过 接口类名直接调用
而default方法,需要 接口实现类实例化后调用。定义接口实现类JDK8InterfaceImpl如下:

public class JDK8InterfaceImpl implements JDK8Interface {
    public static void main(String[] args) {
        JDK8Interface.myStaticMethod();

        JDK8InterfaceImpl jdk8Interface = new JDK8InterfaceImpl();
        jdk8Interface.myDefaultMethod();
    }
}

由于static的原因,静态方法不能重写;但是default方法却可以,重写myDefaultMethod代码如下:

public class JDK8InterfaceImpl implements JDK8Interface {

   ...

    @Override
    public void myDefaultMethod() {
        System.out.println("接口中的default方法不满足需求,需要重写");
    }
}

这里稍注意下,JDK8Interface接口中default方法用了修饰符"default",这里重写后修饰符是"public"

由于java实行的是单继承extends多实现implements,那JDK8新增特性中的两个方法有啥要求不?

  • 首先看看static方法,由于调用static方法时,用的是接口类名,不能的接口类名肯定不同,所以没影响
  • 对于default方法, 有于是实现类实例化后调用,若该类有多个接口且接口中有相同名称的default方法,这时候编译器就没办法区分了,会报错,必须重写default方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值