在Java中,我们可以为其接口中定义的方法提供一个默认的实现。当然,这可能并没有很大的用处,不过,在某些情况下可能很有用!如果要为接口方法提供一个默认实现,必须要用 default关键字 修饰。

在为接口方法提供一个默认实现的时候,我们可能会遇到一些问题 —— 默认方法冲突!

public class Test{public static void main(String[] args) {System.out.println(new People().getName());System.out.println(new Student().getName());}
}interface Person {default String getName(){return "<=Person=>";}
}interface Human {default String getName(){return "<=Human=>";}
}class People implements Person, Human {@Overridepublic String getName() {return Person.super.getName();}
}class Student extends People implements Human {@Overridepublic String getName() {return super.getName();}
}

以上的代码就清晰的展现了,在不同的接口中定义相同名称的默认方法产生的方法冲突问题!

运行结果:

通过结果我们得到结论:

1. 如果在一个接口中提供了一个默认方法,在另一个接口中同样也提供了一个相同名称且参数类型也相同的默认方法,当一个类 implements 这两个接口并使用其默认方法时,就会产生歧义,所以要在 super.getName( ) 前加上接口名 —— Person.super.getName( )这样就解决了冲突问题!

2. 当子类继承父类,并从父类子类的接口中继承了相同的方法,在这种情况下,从运行结果中我们可以看出,子类会调用父类的方法,而不是接口中的默认方法,所以我们可以看出,在这种情况下接口中所有的默认方法都会被忽略,只会去调用父类中的方法,体现了类优先的规则 !

Java接口中的默认方法冲突相关推荐

  1. Java8新特性Optional、接口中的默认方法与静态方法

    Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...

  2. Java 8中的默认方法(Defender方法)简介

    我们都知道Java中的接口仅包含方法声明,而没有实现,并且任何实现该接口的非抽象类都必须提供实现. 让我们看一个例子: public interface SimpleInterface {public ...

  3. Java1.8接口方法都是抽象,判断(1分) Java接口中所有的方法都是抽象的。

    判断(1分) Java接口中所有的方法都是抽象的. 更多相关问题 [配伍题,B型题] (1).木瓜(). (2).独活().(3).防己().(4).蕲蛇(). [比较题] (1).质硬不易折断的是( ...

  4. Java8新特性_接口中的默认方法

    默认方法由来猜想 1. Collection接口.Collections公共类.  同是操作集合,为啥要搞俩?没必要.在接口中搞一些默认实现,一个接口即搞定了. 2. Java8支持Lambda表达式 ...

  5. 接口中默认方法和静态方法_接口中的默认方法和静态方法

    接口中默认方法和静态方法 在我们最初的Java 8支持公告中,我们特别提到了流的缺乏,但完全错过了默认/静态本机接口不起作用的事实. 现在,由于有一个警惕的社区成员指出了这一问题,因此此问题已得到解决 ...

  6. 接口中的默认方法和静态方法

    在我们最初的Java 8支持公告中,我们特别提到了缺少流,但是完全错过了默认/静态本机接口不起作用的事实. 现在,由于有一个警惕的社区成员指出了这一问题,因此此问题已得到解决. 由于限制需要全新构建才 ...

  7. Java 8:声明接口中的私有方法和受保护的方法

    引入Java 8时,我们可以在接口中使用默认方法. 此功能的主要驱动程序是允许扩展接口,同时保留对旧接口版本的向后兼容性. 一个示例是在现有Collection类中引入stream()方法. 有时,当 ...

  8. JAVA 8 接口中的默认方法和Lambda 表达式基本使用

    一.接口中的默认方法 在JDK1.8之前,interface之中可以定义变量和方法,变量必须是public.static.final的,方法必须是public.abstract的 在JDK 1.8开始 ...

  9. defender 删除_Java 8中的默认方法(Defender方法)简介

    defender 删除 我们都知道Java中的接口仅包含方法声明,而没有实现,并且任何实现该接口的非抽象类都必须提供实现. 让我们看一个例子: public interface SimpleInter ...

最新文章

  1. 设置grep高亮显示匹配项
  2. AI解救“工具人”:RPA+AI,让万物皆可自动化
  3. 比较两个文件夹图像相似度
  4. 007-SDK框架之LYWSDKInterfaceProtocol.cpp
  5. 秒杀系统的架构解决之道
  6. php无刷新分页插件,jQuery插件jPaginate实现无刷新分页_jquery
  7. 一文秒懂!Python字符串格式化之format方法详解
  8. 【模拟】Codeforces 705A Hulk
  9. 如何让 Hyper-V 和 VMware 虚拟机软件共存?
  10. 【渝粤题库】陕西师范大学300008 历史教学论
  11. A - Character Encoding HDU - 6397 - 方程整数解-容斥原理
  12. 【渝粤教育】国家开放大学2018年春季 0690-21T化工原理及实验 参考试题
  13. oracle数据库查询正在执行的sql,Oracle查询正在执行的SQL语句
  14. c语言同余法随机数,线性同余法取随机数
  15. 小米MiSans字体安装教程
  16. 阿里云一级域名跳转https的二级域名配置说明(主域名跳转子域名, 不带www跳带www)
  17. 怎么转换书法字体?教你快速转换毛笔字体
  18. ifft 快速傅里叶逆变换(Matlab)
  19. iOS 修改苹果开发者公司账号(Apple ID 更换)
  20. 【Lesson 13】万能和弦和弦走向

热门文章

  1. 百度前端面试题及答案
  2. 【心态】:阳光心态,健康生活
  3. MMAction2 学习笔记 (一)——骨骼动作识别模型相关内容
  4. 事务隔离级别——Read uncommitted
  5. PIC16F877A与Proteus仿真-24C01驱动仿真
  6. linux切换用户su自动输入密码,Linux切换用户出现【su:命令鉴定故障】问题修改的密码位数必须大于8位的问题...
  7. oracle addm报告分析,Oracle addm
  8. [转] 介绍vi命令
  9. Source Insight序列号
  10. Docker安装制作