Java 8小记 - Default Method

栏目: 编程语言 · Java · 发布时间: 7年前

内容简介:Java 8小记 - Default Method

本文主要介绍 Java 8default 方法 的简单使用

简介

  1. default方法 作为 接口的一部分 由实现类 继承
  2. default方法 的目标用户是类库设计者
    • 兼容 的方式解决 类库的演进 问题

Java 8小记 - Default Method

冲突解决

一个类可以实现 多个拥有默认方法的接口 ,从而实现行为的 多继承 ,按照下列步骤解决冲突

  1. 类或父类 中声明的方法的优先级高于任何声明为默认方法的优先级
  2. 子接口的default方法 优先级高于父接口的default方法
  3. 显式 选择使用哪一个default方法

类与接口定义

相关代码托管在 java8_demo

interface A{
    defaultStringhello(){
        return "Hello From A";
    }
}

interface Bextends A{
    @Override
    defaultStringhello(){
        return "Hello From B";
    }
}

class Cimplements A{
    @Override
    publicStringhello(){
        return "Hello From C";
    }
}

class Dextends Cimplements A,B{
}


class Eextends Dimplements A,B{
    @Override
    publicStringhello(){
        return "Hello From E";
    }
}

class Fimplements A,B{
}

interface G{
    defaultStringhello(){
        return "Hello From G";
    }
}

class Himplements B,G{
    @Override
    publicStringhello(){
        // A.super.hello() is not ok
        return B.super.hello(); // 显示选择 B 的 default 方法实现
    }
}

Java 8小记 - Default Method

类或父类中的方法

 @Test
public void fatherTest(){
   Supplier<D> dSupplier = D::new;
   assertEquals("Hello From C", dSupplier.get().hello());
}
    
@Test
public void selfTest(){
   Supplier<E> eSupplier = E::new;
   assertEquals("Hello From E", eSupplier.get().hello());
}
  1. D 继承类 C ,类 C 有自己的重写版本,优先级高于接口的 default 方法,选择父类 C 的重写版本
  2. E 有自己的重载版本,优先级高于间接父类 C 的重写版本和接口的 default 方法,选择自身的重写版本

子接口的default方法

@Test
public void sonInterfaceTest(){
   Supplier<F> fSupplier = F::new;
   assertEquals("Hello From B", fSupplier.get().hello());
}

F 实现接口 BA ,而 B 有继承 A ,子接口 B 的优先级更高,选择接口 Bdefault 实现

显式选择

@Test
public void explicitTest(){
   Supplier<H> hSupplier = H::new;
   assertEquals("Hello From B", hSupplier.get().hello());
}

接口 BG 没有继承关系,对 类 H 来说两者属于平等关系 ,必须重写,重写版本中显示选择了 Bdefault 实现

转载请注明出处:http://zhongmingmao.me/2017/06/02/java8-default/

访问原文「 Java 8小记 - Default Method 」获取最佳阅读体验并参与讨论


以上所述就是小编给大家介绍的《Java 8小记 - Default Method》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

一目了然

一目了然

Robert Hoekman, Jr. / 段江玲 / 机械工业出版社华章公司 / 2012-3-19 / 59.00元

可用性或易用性是软件或Web设计师的重要设计目标之一。本书深入阐述了如何设计出简单易用的基于Web的软件,以帮助读者理解、掌握显性设计的精髓。作者从软件开发初期谈起,一直到软件设计后期,分析诸多案例并论证了自己的见解或设计原则。本书在第1版的基础上进行了重大改进,尤其是在设计思想上,作者在本书中谈到“以用户为中心的设计”、“以任务为中心的设计”以及“以情景为中心的设计”的理念。这种设计理念也将更直......一起来看看 《一目了然》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具