查看原文
其他

JDK8新特性之接口默认方法与静态方法

2017-10-05 javastack Java技术栈


接口默认方法与静态方法

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

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

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

  1. default void forEach(Consumer<? super T> action) {

  2.    Objects.requireNonNull(action);

  3.    for (T t : this) {

  4.        action.accept(t);

  5.    }

  6. }

简单的例子

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

  1. public static void main(String[] args) {

  2.    IUserInterface userInterface = new UserServiceImpl();

  3.    System.out.println(userInterface.getDefaultUser1());

  4.    System.out.println(IUserInterface.getDefaultUser2());

  5. }

  6. interface IUserInterface {

  7.    default User getDefaultUser1() {

  8.        return new User("Susan1", 11);

  9.    }

  10.    static User getDefaultUser2() {

  11.        return new User("Susan2", 22);

  12.    }

  13. }

  14. static class UserServiceImpl implements IUserInterface {

  15. }

注意要点

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

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

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

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

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

推荐阅读



什么是Spring Boot?

Spring Boot开启的2种方式

Spring Boot Starters启动器

Spring Boot定制启动图案

Spring Boot核心配置

Spring Boot功能实战

Spring Boot自动配置原理、实战

Spring Boot Runner启动器

Spring Boot - Profile不同环境配置


看完有没有收获?

分享到朋友圈给更多的人吧。




  Java技术栈  
微信公众号:「Javastack

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


 ▼长按二维码关注我们↓↓↓



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存