为什么Object类的方法可以在接口中使用?

2023-12-15

以下接口和类已成功编译。 下面的输出中提到了问题:

interface MyInterface{}

class MyClass implements MyInterface{}

class InterDoubt{

    static MyInterface mi ;//= new MyClass() ;

    public static void main(String[] args){
        System.out.println("X") ;

        try{
            synchronized(mi){
                try{
                    mi.wait(4000) ;
                }
                catch(InterruptedException ie){
                    System.out.println("Exception occured at main.") ;
                }
            }
        }
        catch(Exception e){
            System.out.println("voilla, MyInterface is an interface,\n" + 
                       "then why compiler allows compilation of\n" +
                       "mi.getClass(), mi.wait().\n" +
                       "Or how the methods of Object class are available in an interface."
            );
        }

        System.out.println("Y") ;
    }
}

output :

X

瞧,MyInterface 是一个接口,

那么为什么编译器允许编译

mi.getClass()、mi.wait()。

或者如何在接口中使用对象类的方法。

Y


Edited:- 我接受否认的答案,因为这是最有解释性的。但读完答案后,又出现了一个问题:-

"请记住,如果接口尝试在 Object 类中声明一个声明为“final”的公共实例方法,那么它将导致编译时错误。例如,“public Final Class getClass()”是在 Object 类中声明为“final”的公共实例方法,因此如果接口尝试声明具有此签名的方法,则编译将失败“(引自解释)。

那么为什么以下代码能够成功编译:-

interface MyInter{
    public void method() ;
}

class MyClass implements MyInter{

    public final void method() {
        .......
        .......
              .......
    }

}

您正确指出的异常是在 Java 语言规范中指定的。接口将自动获取添加的 java.lang.Object 类中的所有成员。从here:

Java语言规范明确规定接口的成员是在接口中声明的成员和从直接超级接口继承的成员。如果接口没有直接超接口,则该接口隐式声明与 Object 类中声明的每个公共实例方法相对应的公共抽象成员方法,除非显式声明具有相同签名、相同返回类型和兼容的 throws 子句的方法那个界面。这使得编译器可以使用对象方法的签名,并且代码编译时不会出现任何错误。请记住,如果接口尝试在 Object 类中声明一个声明为“final”的公共实例方法,那么它将导致编译时错误。例如,“public Final Class getClass()”是在 Object 类中声明为“final”的公共实例方法,因此如果接口尝试声明具有此签名的方法,则编译将失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Object类的方法可以在接口中使用? 的相关文章

  • Java Try Catch Final 没有 Catch 的情况下会阻塞

    我正在审查一些新代码 该程序只有一个 try 和一个 finally 块 既然排除了 catch 块 那么如果 try 块遇到异常或任何可抛出的内容 它如何工作 它直接进入finally块吗 如果 try 块中的任何代码可以引发已检查异常
  • 如何在spring mvc中从控制器名称+操作名称获取映射的URL?

    是否有现有的解决方案可以从 Spring MVC3 中的 控制器名称 操作名称 获取映射的 URL 例如 asp net mvc 或 Rails 中的 UrlHelper 我觉得非常有用 thx 也许 你想要这样的东西 in your Co
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 如何在android中设置多个闹钟,在这种情况下最后一个闹钟会覆盖以前的闹钟

    我正在开发一个Android应用程序 用户可以在其中设置提醒时间 但我在以下代码中遇到一个问题 即最后一个警报会覆盖之前的所有警报 MainActivity java public void setreminders DatabaseHan
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • 如何获取 WebElement 的父级[重复]

    这个问题在这里已经有答案了 我试过了 private WebElement getParent final WebElement webElement return webElement findElement By xpath 但我得到
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • Java - 返回值是否会中断循环?

    我正在编写一些基本上遵循以下格式的代码 public static boolean isIncluded E element Node
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • Java:多线程内的 XA 事务传播

    我如何使用事务管理器 例如Bitronix http docs codehaus org display BTM Home JBoss TS http www jboss org jbosstm or Atomikos http www a
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett
  • 启动Java项目时发生类冲突:ClassMetadataReadingVisitor将接口org.springframework.asm.ClassVisitor作为超类

    我正在使用最新的Spring框架版本 3 2 2 RELEASE 开发一个Java Web项目 但是现在项目启动时遇到了问题 详细错误是 java lang IncompleteClassChangeError 类 org springfr

随机推荐

  • 与“PropTypes.element”相对应的“defaultProp”的正确值是什么?

    我有一个组件 我希望接受另一个组件作为道具 并渲染它 我希望传递的组件是可选的 并且在这种情况下不渲染任何内容 下面的代码可以完美运行 const Component Inner gt div div
  • 有没有办法生成单元测试来测试我的语法

    我使用 antlr4 创建了语法 但我想测试稳健性有没有自动工具或快速完成此操作的好方法 谢谢 由于很难找到 ANTLR 的真正单元测试 我写了两篇关于它的文章 Lexer 的单元测试 解析器的单元测试 A 词法分析测试检查给定文本是否被读
  • 如何使 ImageButtons 边界环绕图像?

    我正在为 Android 应用程序制作 GUI 该 GUI 包含四个方向ImageButtons 看下图 但是当试图做到这一点时总是失败 因为为每个图像保留了一个正方形 这就是我所达到的 那是我的XML code
  • 我现在可以将使用 WatchKit 的应用程序上传到 App Store 吗?

    我制作了一个应用程序 包括一个iOS应用程序和一个WatchKit应用程序 每个部分都可以独立运行 我现在可以将此应用程序上传到 App Store 以便在发布时可以在 Apple Watch 上使用吗 还是必须等待 如果答案是肯定的 我是
  • 如何将 CreateObject("Wscript.shell") 转换为 C# [重复]

    这个问题在这里已经有答案了 我怎样才能用 C 翻译这个 Set WshShell WScript CreateObject WScript Shell 谢谢 这个用在什么场合呢 还有我必须在 C 中包含什么库才能工作 使用用于脚本编写的 S
  • 如何在 iPhone 的图像上添加文字?

    我需要在 iPhone 中将文本放在图像上 它就像 Eurosport iPhone 应用程序 source mzstatic com 以同样的方式 我需要在我的应用程序中添加文本 我怎样才能做到这一点 Thanks 我找到了两种方法 1
  • 我可以使用 WinApi Deploy Cmd 在电脑上安装、更新吗

    我的 appx 文件安装在文件夹中 我可以通过双击该文件来安装它 但我正在寻找一种使用 WinAppDeployCmd 进行安装和更新过程来安装它的方法 WinAppDeployCmd install file C release file
  • Hadoop:JPS 找不到已安装的 Java

    我的配置是 hduser worker1 usr local hadoop conf jps The program jps can be found in the following packages openjdk 6 jdk open
  • 如何使用外部 JSON...?

    花了几个小时试图解决这个问题 但我无法弄清楚出了什么问题 我想做的就是加载这个 https recruit zoho com ats EmbedResult hr jodigest 2cV Sr2As6VxhLMxQGuTNij g Fb3
  • 通过 cron 执行的 Google Cloud SDK 代码

    我正在尝试实现一个自动代码来通过 Crontab 关闭和启动我的 Google Cloud 帐户中的 VM 实例 操作系统是 Ubuntu 12 lts 并安装了 Google 服务帐户 因此它可以处理我的 Google 云帐户上的读 写
  • 如何使用tensorflow进行文本分类?

    我是张量流和机器学习的新手 我在编写张量流代码时遇到问题 该代码的文本分类类似于我尝试使用 sklearn 库进行的文本分类 我在对数据集进行矢量化并向张量流层提供输入方面面临着重大问题 我确实记得对标签进行了一次热编码 但前面的张量流层不
  • Twitter 模块 python 'module' 对象没有属性 Oauth

    我正在尝试遵循这个基本示例here Code import twitter XXX Go to http dev twitter com apps new to create an app and get values for these
  • 随机化神经网络输入顺序的影响

    在我的高级算法和数据结构课程中 我的教授要求我们选择任何我们感兴趣的主题 他还告诉我们要研究它并尝试实施解决方案 我选择神经网络是因为它是我长期以来想学习的东西 我已经能够使用神经网络实现 AND OR 和 XOR 该神经网络的神经元使用阶
  • 共享变量的过时值

    在阅读实践中的并发性时 我读到 NoVisibility展示了一种不充分的方法 同步程序可能会导致令人惊讶的结果 陈旧的数据 当 的时候 读者线程检查ready 它可能会看到一个过时的值 除非 每次访问变量时都会使用同步 这是 可能会看到该
  • 分离数据框列中的值并融化

    我有一个数据框 我想在其中分隔 Client ID 列中的值并融化 因此每一行都包含一个 Client ID 以及相应的 Account Name 和所有者 gt head df Account Owner Account Name Cli
  • C++ 将带有分隔符的文本文件读取到结构数组中

    我正在尝试从格式类似于此的文本文件中读取数据 knife object 0 bag object 15 kitchen room 400 放入由结构体组成的数组中 这是我到目前为止所拥有的 但它只读取第一个元素然后返回垃圾 include
  • 提供 SOAP/XML + REST/JSON 的最佳方式是什么?

    我正在创建一个通用 Web 服务 该服务可能有许多不同的客户端 其中一些我目前无法预料 我已经有了一个很好的 Java 服务 API 并且希望在此基础上提供一个 Web 服务外观 SOAP 与 REST 争论的双方都有很大的争论 这让我想知
  • 数组中的随机数而不连续两次重复相同的数字?

    我正在使用 Swift 和 SpriteKit 制作一个游戏 其中我根据数组将对象移动到随机位置 由 CGPoints 组成的数组 let easyArray CGPointMake 0 0 CGPointMake 126 6 0 CGPo
  • 如何从基于年份的大数据集中获取多个矩阵

    在我开始之前 这里是我正在处理的数据的一小部分 我提前为它太大而道歉 注意这只是一个非常大的数据集的前 30 行 mydata lt structure list ParkName c SEP CSSP SEP ONF SEP ONF SE
  • 为什么Object类的方法可以在接口中使用?

    以下接口和类已成功编译 下面的输出中提到了问题 interface MyInterface class MyClass implements MyInterface class InterDoubt static MyInterface m