zoukankan      html  css  js  c++  java
  • Java8新特性_接口中的默认方法

    默认方法由来猜想

    1. Collection接口、Collections公共类。  同是操作集合,为啥要搞俩?没必要。在接口中搞一些默认实现,一个接口即搞定了。

    2. Java8支持Lambda表达式,需要函数式接口。而函数式接口只允许有一个方法的声明。而为了兼容7或之前的版本的Java,用default 声明成默认方法。既不影响它是一个方法声明的函数式接口,也不影响它有多个其它需求的方法,兼容Java之前版本的一些接口的声明。

    接口默认方法的类优先原则

    若一个接口中定义了一个默认方法,而另外一个父类或接口中又定义了另外一个同名方法时,

      1、选择父类中的方法。  如果一个父类提供了一个具体的实现,那么接口中具有相同名称和参数的默认方法会被忽略。

      2、接口冲突。  如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(不管方法是否是默认方法)那么必须覆盖改方法来解决冲突。

    public interface MyInterface01 {
    
        default void invoke() {
            System.out.println("MyInterface01");
        }
    
    }
    @FunctionalInterface
    public interface MyInterface02 {
    
        /**
         * 可以有默认的方法的实现
         */
        default void invoke() {
            System.out.println("MyInterface02");
        }
    
        /**
         * 可以有静态方法
         */
        static void show() {
            System.out.println("This is interface's static method show() ");
        }
    
        /**函数式接口的声明,only one*/
        void test();
    
    
    }
    public class FatherClass {
    
        void invoke() {
            System.out.println("FatherClass");
        }
    }
    public class MyFun extends FatherClass implements MyInterface01,MyInterface02{
    
    //    @Override
    //    public void invoke() {
    //        MyInterface01.super.invoke();
    //        MyInterface02.super.invoke();
    //    }
    
        @Override
        public void invoke() {
            super.invoke();
        }
    
        public static void main(String[] args) {
            MyFun fun = new MyFun();
            fun.invoke();
        }
    }
  • 相关阅读:
    系统架构
    创造HTTPS的是个神
    为Chrome开发插件提高工作效率
    Javascript 控制style 小结
    svcutil 生成代理类时的问题
    xeam Build Definition Extension uninstall 卸载
    看看 Delphi XE2 为 VCL 提供的 14 种样式
    FireMonkey 绘图(1)
    终于, Delphi XE2 携带 GDI+ 库了
    关于禁止程序重复启动的另一种需要与实现
  • 原文地址:https://www.cnblogs.com/guchunchao/p/10324208.html
Copyright © 2011-2022 走看看