接口默认方法与静态方法

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

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

之前讲过的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面试题,以及前沿热门资讯等。

最新文章

  1. 【NLP】基于自然语言处理角度谈谈CRF(二)
  2. 网站实现微信登录之回调函数中登录逻辑的处理--基于yii2开发的描述
  3. [Erlang 0129] Erlang 杂记 VI
  4. Hamming Distance
  5. ThinkPHP配置简单的mysql读写分离
  6. 开始使用Pyhton
  7. go1.6.2 linux/amd64 的一个bug: gcc: 无法识别的选项&lsquo;-no-pie&rsquo;
  8. Java 8的新并行API - 魅力与炫目背后
  9. [转载] linux 程序运行过程中替换文件
  10. T4 Templates
  11. python之poplib库
  12. Java 多线程的基本概念
  13. lex&amp;yacc5--YYSTYPE
  14. POJ 3107
  15. win7下装ubuntu
  16. html5 本地存储
  17. Python基础练习
  18. oracle 主键应用序列和触发器实现自动增长
  19. PHP curl_setopt函数用法介绍
  20. 《java入门第一季》之HashSet存储自定义对象问题以及注意事项

热门文章

  1. inline-block 导致元素下沉 解决方法添加vertical-align:middle属性
  2. switch gnome-terminal tabs
  3. 洛谷P1629 邮递员送信 最短路-Djistra
  4. 数据转化之JSON
  5. Zookeeper安装配置及简单使用
  6. Nginx反向代理与负载均衡应用实践(二)
  7. 【Luogu】【关卡2-15】动态规划的背包问题(2017年10月)【还差一道题】
  8. 【LeetCode】排序
  9. go变量和声明
  10. DOM学习总结(二)