美文网首页
默认方法

默认方法

作者: 请叫我铁臂阿童木 | 来源:发表于2019-06-20 15:32 被阅读0次

背景

java中实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现。这样就导致了一个问题,一旦接口更新,那么所有实现类为了适配新的接口也必须进行修改。

为解决这一问题,Java 8允许在接口内声明静态方法,其二,Java 8引入了一个新功能,叫默认方法。

使用

如何判别一个方法来源于何处?

如果一个类使用相同的函数签名从多个地方(比如另一个类或接口)继承了方法,通过三条规则可以进行判断。

(1) 类中的方法优先级最高。类或父类中声明的方法的优先级高于任何声明为默认方法的优 先级。

(2) 如果无法依据第一条进行判断,那么子接口的优先级更高:函数签名相同时,优先选择 拥有最具体实现的默认方法的接口,即如果B继承了A,那么B就比A更加具体。

(3) 最后,如果还是无法判断,继承了多个接口的类必须通过显式覆盖和调用期望的方法,显式地选择使用哪一个默认方法的实现。

例:下面代码会打印什么

public interface A {
    default void hello() {
        System.out.println("Hello from A");
    }
}
public interface B extends A {
    default void hello() {
        System.out.println("Hello from B");
        } 
}
public class C implements B, A {
    public static void main(String... args) {
        new C().hello();
    }
}

类C没有提供hello的实现,所以按照规则(2),应该选择的是提供了最具体实现的 默认方法的接口。由于B比A更具体,所以应该选择B的hello方法。所以,程序会打印输出“Hello from B”。

相关文章

  • 默认方法

    什么是默认方法 java8引入了一个新的功能,叫默认方法,通过默认方法你可以指定接口方法的默认实现。换句话说:就是...

  • 默认方法

    1.简述 在Java8之前,Java程序接口是将相关方法按照约定组合到一起的方式。实现接口的类必须为接口中定义的每...

  • 默认方法

    背景 java中实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现。这样就导致了一个问题...

  • 默认方法

    默认方法 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! Java 8 新增了接口的默认方法...

  • 默认方法

    默认方法Java 8中的接口现在支持在声明方法的同时提供实现。通过两种方式可以完成这种操作。其一,Java 8允许...

  • Java 8 特性

    java-8-tutorial 接口的默认方法和静态方法 默认方法用default修饰,默认方法和抽象方法之间的区...

  • 八 接口中的默认方法与静态方法

    一、接口中的默认方法 Java 8中允许接口中包含具有具体实现的方法,该方法称为“默认方法”,默认方法使用 def...

  • Java自学-接口与继承 默认方法

    默认方法 步骤 1 : 什么是默认方法 默认方法是JDK8新特性,指的是接口也可以提供具体方法了,而不像以前,只能...

  • 方法

    def定义一个方法 当没有return时,方法默认返回None 方法参数默认值从右到左,强烈推荐方法默认值为静态值...

  • 1.4 默认方法

    接口可以写默认方法,用default定义

网友评论

      本文标题:默认方法

      本文链接:https://www.haomeiwen.com/subject/ehhjqctx.html