jdk8对接口的增强(默认接口方法与静态接口方法)

可能在偶然间, 我们突然发现, 在点开某一个接口的源码的时候, 我们突然发现接口里面的方法竟然有了方法体。 莫慌, 那么恭喜你, 你使用的JDK版本一定是在JDK8之后的版本, 这就是JDK8对接口的增强(默认接口方法和静态接口方法)

情景及代码案例

现在我们有了人这个类, 我们知道人之所以区别于其他的动物, 很大部分原因是因为我们的交流沟通能力很强, 于是我们定义一个插件接口。 这个接口里有两个方法等待我们实现。 人说什么国家的语言人用什么进行说话
首先在我们中国, 人分东北人、河南人、福建人…那么好, 我们每一种人都继承说话这个接口实现第一个方法, 我们都说中国话, 那么我们一个类接一个类的去实现这个接口, 会造成大量的代码重复, 违反了我们编码的原则, 也不利于以后的维护, 于是默认方法来了, 好我在代码里就给你先实现, 人说中国话!

/**
 * 接口---说话
 * 
 * <pre>
 * 用来测试讲解JDK8对接口的增强
 * </pre>
 * 
 * @author YangHang
 * @Date 2018年12月8日 上午12:18:00
 *
 */
public interface Speak {

    /**
     * 默认方法
     */
    default void speakByLanguage() {
        System.out.println("说中文");
    }
}

使用默认接口的好处是, 中国大部分人都说中国普通话, 如果有个别的地区非要坚持自己的方言, 举个栗子。 东北人我就说东北话, 好, 东北人这个类就重新这个方法, 我就要说普通话。没错, 默认方法是可以被重写的。
在这里插入图片描述
好, 我们再来说第二个接口方法, 人用什么说话, 好嘛, 除了嘴, 全世界的人民都找不出其他部位来了。 如果来了一种人非要重写这个方法, 说我们就要用眉毛说话, 这不是捣乱么。 于是乎, 我们把用什么说话定义成静态接口方法。 实现这个接口我也不让你重写, 省的你捣乱。

/**
 * 接口---说话
 * 
 * <pre>
 * 用来测试讲解JDK8对接口的增强
 * </pre>
 * 
 * @author YangHang
 * @Date 2018年12月8日 上午12:18:00
 *
 */
public interface Speak {

    /**
     * 默认方法
     */
    default void speakByLanguage() {
        System.out.println("说中文");
    }

    /**
     * 静态方法
     */
    static void speakWith() {
        System.out.println("用嘴说话");
    }
}

我们可以看到, 这个静态接口方法是不可以被重写的

在这里插入图片描述
静态接口想要调用, 需要通过接口名点静态方法名出来, 就像类调用静态方法一样。(用实现类是点不出来的)

最后, 如果我们实现的多个接口有一样方法签名的默认方法, 好嘛, 我知道你到底要说什么话, 你哦这个实现类要搞事情啊, 必须重写, 不然我怎么知道你要说什么语言呢? 静态的接口方法由于是由接口直接调用, 所以不收限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大航子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值