zoukankan      html  css  js  c++  java
  • Java 8新特性之接口改善(八恶人-1)

    Daisy Donergue 多莫歌·黛西

    “By woman, you mean her?” 她也能叫女人?

     

       Java 8在13年9月发布,写这篇博文的时间已经是17年12月份了。来的有点晚,但是有必要补一下1.8的特性。

      一、基本介绍

      Java 8中接口里已经完全可以定义静态方法了. 举一个比较普遍的例子就是在java类库中, 对于一些接口如Foo, 都会有一个有静态方法的工具类Foos 来生成或者配合Foo对象实例来使用. 既然静态方法可以存在于接口当中, 那么大多数情况下 Foos工具类完全可以使用接口中的公共方法来代替 (或者将Foos置成package-private).

      上边的话理解起来就是接口中可以使用default关键字来修饰接口中的方法,打破了接口中不能写方法实现的弊端,也对原来的概念有了极大的冲击,因为之前一直在讲:“接口中不能有方法的实现”,but not now。所以现在更容易混淆的概念是:可以写方法实现可以多继承的接口,可以写方法实现但只能单继承的抽象类。所以再被问起接口中是否可以写实现,你回答的就能直接体现出你是否了解过1.8。代码如下:

    interface Formula { //接口中实现了sqrt的默认算法,只需要使用 default关键字即可,在实现类中只需要实现calculate方法即可使用calculate和sqrt两个方法
        double calculate(int a);
        default double sqrt(int a) {
            return Math.sqrt(a);
        }
    }

      在过去,java类库的接口中添加方法基本上是不可能的. 在接口中添加方法意味着破坏了实现了这个接口的代码。弥补了Java一直以来不支持多继承,但支持多继承的接口不能写方法实现的缺点。但是现在, 只要能够提供一个正确明智的默认的方法的实现, java类库的维护者就可以在接口中添加方法。

      二、具体使用中的问题

      1、接口多继承情况下,同时继承的两个或多个接口中有同样的方法进行的实现,那么实现类中怎么不冲突?在不指明实现类方法指向的是继承自哪个接口的情况下,编译时会直接报错。所以解决方案就是,

        ①在实现类中指明使用了哪个父接口的方法,

        ②实现类中重写方法

      2、同时继承了接口和基类,而接口和基类中的同名方法都进行了实现,如何避免冲突?

        当同时继承了接口和基类,方法冲突时。实现类默认继承基类中的方法,也就是说基类优先级比接口高。当然也可以选择重写。

     

     参考链接:

    http://www.oschina.net/translate/everything-about-java-8

    图片来源:八恶人(movie)

  • 相关阅读:
    科大奥瑞大物实验-A类不确定度计算器 代码
    在手机和电脑间双向加密传输文件 —— Windows 安装 Kde Connect
    Leetcode 寻找两个有序数组的中位数
    树莓派3B安装 Arch Linux ARM
    从零开始编译安装 Extcalc
    Oracle, PostgreSQl, MySQL针对INSERT时可能唯一键重复的SQL
    如何从Oracle, MySql, PostgreSQL的PreparedStatement获得所执行的sql语句?
    PostgreSQL报错:当前事务被终止,命令被忽略,直到事务块结束
    PostgreSQL对GROUP BY子句使用常量的特殊限制
    一种用JDBC实现批量查询的巧妙方法
  • 原文地址:https://www.cnblogs.com/Jacck/p/8058452.html
Copyright © 2011-2022 走看看