1)超类优先。如果超类提供了一个具体方法,同名而且有相同参数类型发默认方法会被忽略。

2)接口冲突。如果一个超接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同的方法,必须覆盖这个方法来解决冲突。

下面来看第二个规则。考虑另一个包含getName方法的接口:

interface Named
{
default String getName(){ return getClass().getName() + "_" + hashCode():}
} 

如果有一个类同时实现了这两个接口会怎么样呢?

class Student implements Person,Named
{
...
}  

类会继承Person和Named接口提供的两个不一致的getName方法。并不是从中选择一个,Java编译器会报告一个错误,让程序员来解决这个二义性。只需要在Student类中提供一个getName方法,在这个方法中,可以选择两个冲突方法中发一个,如下所示:

 class Student implements Person,Named
{
public String getName(){ return Person.suoer.getName();}
...
}

现在假设Named接口没有为getName提供默认实现:

interface Named
{
String getName();
}

Students类会从Person接口继承默认方法吗?这好像挺有道理,不过,Java设计者更强调一致性。两个接口如何冲突并不重要。如果至少有一个接口提供了一个实现,编译器就会报告错误,而程序员就必须解决这个二义性。

我们只讨论了两个接口的命名冲突。现在来考虑另一种情况,一个类扩展了一个超类,同时实现了一个接口,并从超类和接口继承了相同的方法。例如,假设Person是一个类,Student定义为:

class Student extends Person implements Named{...}

在这种情况下,只会考虑超类方法,接口的所有默认方法都会被忽略。在我们的例子中,Student从Person继承了getName方法,Named接口是否为getName提供了默认实现并不会带来什么区别。这正是“类优先”规则。

最新文章

  1. css3中-moz、-ms、-webkit,-o分别代表的意思,以及微信浏览器内核分析
  2. this,this,再次讨论javascript中的this,超全面
  3. 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?(2)
  4. [ASP.NET]以iTextSharp手绘表格并产生PDF下载
  5. jQuery性能优化篇
  6. Android Studio 导入应用时报错 Error:java.lang.RuntimeException: Some file crunching failed, see logs for details
  7. [Luogu3345][ZJOI2015]幻想乡战略游戏
  8. 【原创】大叔经验分享(25)hive通过外部表读写hbase数据
  9. app微信支付-java服务端接口 支付-查询-退款
  10. filter的dispatcher节点
  11. iOS:使用莱文斯坦距离算法计算两串字符串的相似度
  12. 集成算法——Ensemble learning
  13. ZUFE2480: 神奇的序列 2017-05-12 16:45 39人阅读 评论(0) 收藏
  14. [VS]VS2010如何使用Visual Studio Online在线服务管理团队资源(在线TFS)
  15. 发起一个NetCore技术联盟促进NetCore技术应用
  16. 斐波那契堆(Fibonacci heap)原理详解(附java代码实现)
  17. TestNG入门到...
  18. netty 基础知识
  19. 修改gnome-shell扩展“Applications Menu”的菜单区域宽度。
  20. Linux目录结构与文件权限——(五)

热门文章

  1. elasticSearch插件的安装以及使用nginx的modles收集nginx的日志
  2. 阿里巴巴开源canal 工具数据同步异常CanalParseException:parse row data failed,column size is not match for table......
  3. java命令行输入参数
  4. 且谈 Apache Spark 的 API 三剑客:RDD、DataFrame 和 Dataset
  5. eclipse使用git提交代码
  6. javaScript的三种储存方式
  7. 造轮子-AgileConfig基于.NetCore的一个轻量级配置中心
  8. Java 添加、提取PDF中的图片
  9. Java工具类——数学相关的类
  10. SpringCloud之OpenFeign