zoukankan      html  css  js  c++  java
  • JDK8新特性之接口默认方法与静态方法

    接口默认方法与静态方法

    有这样一些场景,如果一个接口要添加一个方法,那所有的接口实现类都要去实现,而某些实现类根本就不需要实现这个方法也要写一个空实现,所以接口默认方法就是为了解决这个问题。

    接口静态方法类似于默认方法,但是我们不能在实现类中覆盖它们,可以避免默认方法在实现类中被覆盖实现。

    之前讲过的JDK8的list.foreache方法,看下源码,其实也是java.lang.Iterable接口的默认方法。

    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

    简单的例子

    默认方法以default修饰,静态方法用static

    public static void main(String[] args) {
        IUserInterface userInterface = new UserServiceImpl();
        System.out.println(userInterface.getDefaultUser1());
        System.out.println(IUserInterface.getDefaultUser2());
    }
    
    interface IUserInterface {
    
        default User getDefaultUser1() {
            return new User("Susan1", 11);
        }
    
        static User getDefaultUser2() {
            return new User("Susan2", 22);
        }
    
    }
    
    static class UserServiceImpl implements IUserInterface {
    
    }

    注意要点

    1、接口默认方法、静态方法可以有多个。

    2、默认方法通过实例调用,静态方法通过接口名调用。

    3、default默认方法关键字只能用在接口中。

    4、默认方法可以被继承,如果继承了多个接口,多个接口都定义了多个同样的默认方法,实现类需要重写默认方法不然会报错。

    5、静态方法不能被继承及覆盖,所以只被具体所在的接口调用。

    推荐阅读

    干货:免费领取2TB架构师四阶段视频教程

    面经:史上最全Java多线程面试题及答案

    工具:推荐一款在线创作流程图、思维导图软件

    分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。

  • 相关阅读:
    4、idea使用git
    ♫【MongoDB】
    -_-#【网站优化】预加载(Pre-loader) / 预读取(Pre-fetching)
    【Node】package.json
    ☀【移动】Google Maps JavaScript API v3
    -_-#【移动】视频分段
    ☀【Grunt】package.json, Gruntfile.js, npm install, grunt
    【three.js】
    【单元测试】
    洛谷——P1125 笨小猴
  • 原文地址:https://www.cnblogs.com/java-stack/p/11952567.html
Copyright © 2011-2022 走看看