java 8中从超类继承方法而不是从实现接口继承默认方法的意义

2023-11-29

我在阅读有关 java 8 默认方法的文章时遇到了以下段落here:

如果层次结构中的任何类具有具有相同签名的方法,则默认方法将变得无关紧要。默认方法不能覆盖 java.lang.Object 中的方法。道理很简单,因为Object是所有java类的基类。因此,即使我们将 Object 类方法定义为接口中的默认方法,它也是无用的,因为 Object 类方法将始终被使用。这就是为什么为了避免混淆,我们不能使用默认方法来重写 Object 类方法。

我很快尝试了以下代码来确认该行为

public class DefaultMethodClass {
    public void defaultMethod() 
    {
        System.out.println("DefaultMethodClass.defaultMethod()");
    }
}

public interface DefaultMethodInterface {
    public default void defaultMethod() 
    {
        System.out.println("DefaultMethodInterface.defaultMethod()");
    }
}

public class DefaultMethodClassInterfaceChild extends DefaultMethodClass implements DefaultMethodInterface  
{
    public static void main(String[] args) {
        (new DefaultMethodClassInterfaceChild()).defaultMethod();
    }
}

这打印

DefaultMethodClass.defaultMethod()

我看不出语言设计者选择这种特定行为背后的任何具体原因。他们有什么重要的原因让我失踪吗?或者只是接口默认方法在逻辑上比超类提供的具体实现更不重要?


我看不出语言设计者选择这种特定行为背后的任何具体原因。

方法定义在 Java 1.0 中,接口默认方法是在 Java 8 中添加的。为 Java 1.0 编写的代码仍然需要工作。

或者只是接口默认方法在逻辑上比超类提供的具体实现更不重要?

实际上,在现有代码编写了 20 多年之后,添加它们的重要性已降低。

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

java 8中从超类继承方法而不是从实现接口继承默认方法的意义 的相关文章

  • H2 - 多个应用程序访问同一个 H2 数据库

    我正在使用嵌入式数据库H2在 2 个网络应用程序中说WebApp1 and WebApp2 我运行 WebApp1 并执行一些查询来访问 H2 数据库 同时我运行 WebApp2 但它抛出异常H2 当前已被另一个进程使用 我的需求是 我应该
  • 在 Java 中将系统属性设置为 Null

    在我的单元测试中 我需要将 workingDir 系统属性设置为 Null 但我不能这样做 因为它给了我 NullPointerException System setProperty workingDir null 我该怎么做 您不能将属
  • Java:BufferedReader readLine() 中的 IOEXception 有何用途?

    我可以使用 try catch 循环 修复 以下异常 但我无法理解原因 为什么 in readLine 部分会不断引发IOExceptions 抛出此类异常的真正目的是什么 目标可能不仅仅是更多副作用 代码和 IOException jav
  • 如何解析比 Java 中 NumberFormat 更严格的数字?

    我正在验证表单中的用户输入 我解析输入NumberFormat http docs oracle com javase 7 docs api java text NumberFormat html 但它是邪恶的 几乎允许任何事情 有没有办法
  • 如何在 Spring Boot 1.4 中自定义 Jackson

    我一直无法找到如何使用的示例Jackson2ObjectMapperBuilderCustomizer java在spring boot 1 4中自定义Jackson的功能 boot 1 4 中自定义 Jackson 的 doco http
  • Eclipse 说“更新 Android Developer Toolkit”

    我不知何故弄乱了我的 Eclipse 和 Android 设置 我不知道如何修复它 问题症状如下 在 首选项 gt Android 中 我尝试选择 android sdk linux 的位置 选择时出现错误 此 Android SDK 需要
  • 将图像缩略图上传到服务器,而不上传整个图像

    据我所知 我在这里问的是不可能的 但我想无论如何我都会问 以防我遗漏了什么 假设您想让用户上传 JPG 图像 并且这些图像被缩放为较小的图标 并且原始图像始终被丢弃并且不再需要 有没有什么方法可以在大多数现代浏览器中普遍使用 让用户选择硬盘
  • SwingWorker 在 Unsafe.park() 处挂起

    我有一个SwingWorker与后台服务器通信 然后更新JFrame 我正在调试我的应用程序并注意到即使在SwingWorker完成了它的工作 它的线程仍然存在 它挂在Unsafe park java lang Object 这是一个本机方
  • UiBinder 中的 gwt 按钮

    我需要创建一个按钮 所以它是一个带有图像的按钮 gwt with UiBinder 但我不确定如何进行 这是我的ui xml code
  • Selenium Webdriver 中显式等待 findElements

    登录后 页面重定向到一个页面 我想等待页面加载 我在其中按 tagName 查找元素 By inputArea By tagName input List
  • 指定自定义应用程序上下文

    我们正在将一些数据服务从使用 jersey spring 的 Jersey 1 x 迁移到使用 jersey spring3 的 Jersey 2 x 我们有一些继承自 JerseyTest 的测试类 其中一些类使用 web xml 文件中
  • Maven:如何获取捆绑在包中的 .so 库

    我有一个带有 jar 和 so 文件的第三方库 我配置了 pom xml 如下
  • 用 Java 捕获扬声器输出

    使用Java可以捕获扬声器输出吗 此输出不是由我的程序生成的 而是由其他正在运行的应用程序生成的 这可以用 Java 完成还是我需要求助于 C C 我有一个基于 Java 的应用程序 使用过的爪哇声音 https stackoverflow
  • 在 jFrame 中启用右键单击

    嘿 我正在寻找如何使用 NetBeans 在 jFrame 中启用 仅且仅 右键单击并显示弹出菜单 使用我的代码 private void formMouseClicked java awt event MouseEvent evt pop
  • 如何在 apache poi 中找到包含图片的单元格

    我尝试在 xls 文档中循环图像 我写下一个代码 HSSFPatriarch patriarch sheet getDrawingPatriarch if patriarch null Loop through the objects fo
  • 使用 colt java lib 时出现“矩阵太大”异常

    我正在使用 cern colt matrix lib 进行稀疏矩阵计算 但似乎我一直遇到此错误 线程 main 中的异常 java lang IllegalArgumentException 矩阵太大 我认为这是因为构造函数在 nrows
  • Java可以进行进程监控吗?

    是否可以用Java编写一个在托盘中运行的应用程序 并且当启动某个应用程序时 它可以检测到它 我想对某些程序执行此操作 以了解我每周使用它们多长时间 我是 Java 新手 所以我不知道 Java 是否是最适合此操作的语言 或者它是否具有对操作
  • 使用 JPA 和 Hibernate 时 DISTINCT 如何工作

    DISTINCT 在 JPA 中使用什么列 是否可以更改它 以下是使用 DISTINCT 的 JPA 查询示例 select DISTINCT c from Customer c 这没有多大意义 不同的列是基于哪一列 它是否在实体上指定为注
  • 使用反射 API 填充 Proto 中的地图字段

    我正在尝试编写一个模块 该模块将获取 Message Builder 和从字段名称到值的映射 并将用值填充构建器 一切正常 直到我遇到地图字段 使用 Proto3 我收到一条特定消息 我知道我可以执行该消息的字段 builder b put
  • 在私有 guice 模块中公开 Map

    我在 guice 中有一个 PrivateModule 我想从该模块公开一个 Map public class TestInjectionModule extends PrivateModule expose Map class annoa

随机推荐