热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么接口在案例1中抛出编译时错误,但在案例2中成功编译

如何解决《为什么接口在案例1中抛出编译时错误,但在案例2中成功编译》经验,为你挑选了1个好方法。

我在"CASE 1"中有两个接口,其中我有相同的方法和不同的返回类型,我在另一个接口中扩展两个接口然后我得到编译时错误,因为返回类型与继承方法不兼容但是在这里我们是在第三个接口中扩展两个接口然后方法被重载并且在方法重载中返回类型的方法没有效果,那么为什么这会给出错误.

另外,如果我在"CASE 2"中具有相同返回类型的两个接口中的相同方法,并且在第三个接口中扩展两个接口,那么这里我没有得到任何错误.为什么?

情况1 Interface1.java
public interface I1
{
int m();
}
Interface2.java
public interface I2
{
void m();
}
Interface3.java
public interface I3 extends I1,I2
{

}
案例2 Interface1.java
public interface I1
{
int m();
}
Interface2.java
public interface I2
{
int m();
}
Interface3.java
public interface I3 extends I1,I2
{

}

Jon Skeet.. 8

在第一种情况下,界面不一致.任何类都不可能实现它,因为它不能满足"必须有int m()方法"和"必须有void m()方法" 的约束.

你说"在方法重载返回类型的方法没有影响" - 这不是真的.在方法重载中,返回类型不是签名的一部分.您不能通过仅更改返回类型来重载方法,因为它们具有相同的签名:

class Foo
{
    public void m() {}
    public int m() { return 1; }
}

结果:

error: method m() is already defined in class Foo

在第二种情况下,界面是一致的.只需一个方法就可以实现它int m() { ... }.事实上,单一方法将用于实现两者I1.m并且I2.m不是问题.



1> Jon Skeet..:

在第一种情况下,界面不一致.任何类都不可能实现它,因为它不能满足"必须有int m()方法"和"必须有void m()方法" 的约束.

你说"在方法重载返回类型的方法没有影响" - 这不是真的.在方法重载中,返回类型不是签名的一部分.您不能通过仅更改返回类型来重载方法,因为它们具有相同的签名:

class Foo
{
    public void m() {}
    public int m() { return 1; }
}

结果:

error: method m() is already defined in class Foo

在第二种情况下,界面是一致的.只需一个方法就可以实现它int m() { ... }.事实上,单一方法将用于实现两者I1.m并且I2.m不是问题.


推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • 本文介绍了在Java中检查字符串是否仅包含数字的方法,包括使用正则表达式的示例代码,并提供了测试案例进行验证。同时还解释了Java中的字符转义序列的使用。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • (译)如何使用cocos2d制作一个太空射击游戏
    原文链接地址:http:www.raywenderlich.com3611how-to-make-a-space-shooter-iphone-game程序截图:  在这个教 ... [详细]
  • 首先需要强调,当使用某个类时一般目的有二:实例化成对象或者继承它产生新类。对于前者 ... [详细]
  • 下面是自己写的日历控件,在开发中可以当做一个插件来用。该插件共包括:CalendarPop.java日历控件主类ActionButtonListener.java监听动作按钮的监听器DayC ... [详细]
author-avatar
南阳啸68
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有