美文网首页
默认方法

默认方法

作者: PawsUp | 来源:发表于2019-03-04 12:55 被阅读0次
  • 默认方法
    Java 8中的接口现在支持在声明方法的同时提供实现。通过两种方式可以完成这种操作。其一,Java 8允许在接口内声明静态方法。其二,Java 8引入了一个新功能,叫默认方法,通过默认方法可以指定接口方法的默认实现。换句话说,接口能提供方法的具体实现。因此,实现接口的类如果不显式地提供该方法的具体实现,就会自动继承默认的实现。
    默认方法由default修饰符修饰,并像类中声明其他方法一样包含方法体,是一种以源码兼容方式向接口内添加实现的方法。

    Java8中抽象类和抽象接口:

    1. 一个类只能继承一个抽象类,但是一个类可以实现多个接口。
    2. 一个抽象类可以通过实例变量(字段)保存一个通用状态,而接口是不能有实例变量的。
  • 使用模式
    可选方法/行为的多继承

    interface Iterator<T> {
        boolean hasNext();
        T next();
        default void remove() {
             throw new UnsupportedOperationException();
       }
    } 
    

    采用默认方法之后,可以为这种类型的方法提供一个默认的实现,这样实体类就无需在自己的实现中显式地提供一个空方法。

  • 解决现一个类继承了多个方法而它们使用的却是同样的函数签名
    例如:

    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();
       }
    } 
    //由于B比A更具体,所以应该选择B的hello方法。所以,程序会打印输出“Hellofrom B”
    
    1. 类中的方法优先级最高。类或父类中声明的方法的优先级高于任何声明为默认方法的优先级。

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

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

       public class D implements A{ }
       public class C extends D implements B, A {
            public static void main(String... args) {
                new C().hello();
            }
       } 
       //程序会打印输出“Hello from B”
      

    依据规则(1),类中声明的方法具有更高的优先级。D并未覆盖hello方法,可是它实现了接口A。所以它就拥有了接口A的默认方法。规则(2)说如果类或者父类没有对应的方法,那么就应该选择提供了最具体实现的接口中的方法。因此,编译器会在接口A和接口B的hello方法之间做选择。由于B更加具体,所以程序会再次打印输出“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/yokosqtx.html