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();
        }
    }
  • 相关阅读:
    存储过程参数传递
    iCkeck插件
    单点登录
    SQL数据库默认实例与命名实例的区别
    IE浏览器重复提交ajax请求有缓存
    IE里Iframe的Cookie问题解决办法总结
    微信公众服务号开发
    解析url参数含有特殊字符的情况
    使用客户端控件展示增删改查操作
    修改网站web.config后出现奇怪问题找不到网页
  • 原文地址:https://www.cnblogs.com/guchunchao/p/10324208.html
Copyright © 2011-2022 走看看