Java多重继承

2024-03-21

为了完全理解如何解决 Java 的多重继承问题,我有一个需要澄清的经典问题。

假设我有课Animal这有子类Bird and Horse我需要上课Pegasus延伸自Bird and Horse since Pegasus既是鸟又是马。

我认为这是经典的钻石问题。据我所知,解决这个问题的经典方法是使Animal, Bird and Horse类接口和实现Pegasus从他们。

我想知道是否有另一种方法来解决我仍然可以为鸟和马创建对象的问题。如果有一种方法能够创造动物,那就太好了,但不是必需的。


您可以为动物类(生物学意义上的类)创建接口,例如public interface Equidae对于马和public interface Avialae对于鸟类(我不是生物学家,所以这些术语可能是错误的)。

然后你仍然可以创建一个

public class Bird implements Avialae {
}

and

public class Horse implements Equidae {}

and also

public class Pegasus implements Avialae, Equidae {}

从评论中添加:

为了减少重复代码,您可以创建一个抽象类,其中包含要实现的动物的大部分通用代码。

public abstract class AbstractHorse implements Equidae {}

public class Horse extends AbstractHorse {}

public class Pegasus extends AbstractHorse implements Avialae {}

Update

我想补充一个细节。作为布莱恩评论 https://stackoverflow.com/questions/21824402/java-multiple-inheritance/21824485#comment33030508_21824485,这是OP已经知道的事情。

但是,我想强调的是,我建议绕过接口的“多重继承”问题,并且我不建议使用已经代表具体类型(例如 Bird)而更多代表行为的接口(其他人参考鸭子打字,这也很好,但我的意思只是:鸟类的生物学类别,Avialae)。我也不建议使用以大写“I”开头的接口名称,例如IBird,它并没有告诉你为什么需要一个接口。这就是问题的区别:使用接口构造继承层次结构,在有用时使用抽象类,在需要时实现具体类,并在适当时使用委托。

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

Java多重继承 的相关文章

  • 在 mvn 命令中指定 pom.xml 并混合其他项目的目标

    我有多个问题 我可以在 mvn 命令中指定 pom xml 吗 在当前项目上执行 mvn 命令时 我可以混合另一个项目的目标吗 例如 mvn clean otherproject comple otherproject install ot
  • 存根方法时出现 InvalidUseOfMatchersException

    我有这个 TestNG 测试方法代码 InjectMocks private FilmeService filmeService new FilmeServiceImpl Mock private FilmeDAO filmeDao Bef
  • createImage(int width, int height) 的问题

    我有以下代码 作为游戏的一部分每 10 毫秒运行一次 private void gameRender if dbImage null createImage returns null if GraphicsEnvironment isHea
  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • Spring Boot自动装配存储库始终为空[重复]

    这个问题在这里已经有答案了 每次我进入我的服务类时 存储库似乎都没有自动连接 因为它不断抛出 NullPointerException 谁能帮我检查一下我缺少什么吗 这是我的代码 演示应用程序 java package com exampl
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 如何使用 Hibernate (EntityManager) 或 JPA 调用 Oracle 函数或过程

    我有一个返回 sys refcursor 的 Oracle 函数 当我使用 Hibernate 调用该函数时 出现以下异常 Hibernate call my function org hibernate exception Generic
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数

随机推荐

  • 将扫描仪设置为全局变量[重复]

    这个问题在这里已经有答案了 顶部的方法是否将其声明为全局变量 因为它实际上并未接受任何内容 public class java 1 static Scanner stdin new Scanner System in import java
  • heroku rake db:迁移错误“gem install activerecord-mysql-adapter”

    我正在使用 Rails 3 2 6 尝试运行 heroku run rake db migrate 我收到适配器错误 rake aborted Please install the mysql adapter gem install act
  • Netbeans 7.3 如何设置 MAVEN_OPTS,例如最大权限大小

    使用 Netbeans 7 3 时 如何设置 Maven 构建操作属性来设置 MAVEN OPTS 例如 Xms512m Xmx1024m XX MaxPermSize 1024m 尝试右键单击该项目并设置带有属性的操作Env MAVEN
  • 绑定第二个顶点缓冲区似乎破坏了我的第一个顶点缓冲区,OpenGL OES ios 5.1

    我正在创建两个不同的顶点缓冲区 使用两个不同的着色器来渲染它们 一旦我绑定第二个顶点缓冲区 我停放在第一个顶点缓冲区中的数据似乎已损坏或丢失 如果我只生成并绘制一个顶点缓冲区 如下所示 glGenBuffers 1 vb1 glBindBu
  • 如何跨 django 服务器波动的 aws ec2 实例管理 memcached 集群

    在Django中 要集群memcached节点 使用了一种非常简单的方法 只需在所有 django 服务器的 settings py 文件中列出所有节点地址 如下所示 CACHES default BACKEND django core c
  • 年、月和日参数描述了无法表示的日期时间异常

    我使用以下代码将一个对象添加到 ASP NET MVC 3 应用程序内的列表中 但该对象的属性之一给我带来了困难 ls Add new UserRoleModel UserRoleId 1 UserName Paul InsertDate
  • 如何在 Visual Studio 的输出窗口中隐藏异常类型?

    我正在测试一些东西 输出窗口中充满了异常 如何过滤输出窗口中显示的异常类型 Note 在这种情况下 不可能避免异常 据我所知 隐藏异常类型是不可能的 但要过滤掉所有异常消息 请右键单击输出窗口并取消选中 异常消息
  • 如何捕获 cURL 输出到文件?

    我有一个文本文档 其中包含一堆以下格式的 URL URL sitehere com 我想做的是跑curl K myfile txt 并将 cURL 返回的响应输出放入文件中 我怎样才能做到这一点 curl K myconfig txt o
  • iOS 如何以编程方式检测顶视图控制器何时弹出?

    假设我有一个带有 2 个视图控制器的导航控制器堆栈 VC2 位于顶部 VC1 位于底部 我可以在 VC1 中包含一些代码来检测 VC2 刚刚从堆栈中弹出吗 由于我试图从 VC1 的代码中检测 VC2 的弹出 似乎类似视图将出现 or 查看是
  • 模拟器:在 ubuntu 上找不到 ram.img

    我只是在 Android Studio 3 5 的默认模拟器中设置了带有 API 27 的 Nexus 5x 设备 当我尝试启动设备时 设备在出现第一个 Google 标志后就关闭了 事件日志有以下输出 Emulator statvfs h
  • “无法确定临时目录,请手动指定cache_dir”

    Magento 管理员抛出异常 无法确定临时目录 请手动指定cache dir 这是新的托管包上的全新安装 通常它会发生在共享虚拟主机中 但有时也会发生在个人服务器上 如果 tmp 文件夹的权限设置错误 很多人建议修改该文件 lib Zen
  • 如何为列中的每个唯一值创建新的工作簿?

    我需要为 J 列中的每个唯一值运行 foreach 语句 对于每个唯一名称 我想创建一个新的 Excel 工作簿 复制特定名称的所有行 最后使用相同的唯一值保存工作簿 Sub test Range A1 J17 Select Selecti
  • 无法运行钩子/更新后:没有这样的文件或目录

    谢谢这个http danbarber me using git for deployment http danbarber me using git for deployment 很棒的文章 我设法在 git 控制下拥有一个远程服务器 不幸
  • 如何从 VSTS 下载所有附件?

    我正在尝试根据 ID 号将所有工作项附件从 VSTS 下载到它们自己的文件夹中 如果这是可能的 人们将如何继续实现这一目标 我研究过 REST API 但很困惑 而且我找到的所有文档似乎都是关于 Azure DevOps 的 我目前使用的版
  • 如何从 WMI 获取方法

    tl dr我应该怎么SELECT代替 为了获得方法 更多信息 这是一个例子 using var s new ManagementObjectSearcher root CIMV2 SELECT FROM someClass foreach
  • 如何在Python中使用open函数创建文件?

    在Linux环境中 我想创建一个文件并向其中写入文本 HTMLFILE MYUSER OUTPUT myfolder mytext html f open HTMLFILE w IOError Errno 2 No such file or
  • 如何求矩阵的对角线元素?

    我编写了一个函数来将矩阵的对角线元素存储到向量中 但输出并不如我预期 代码是 diagonal lt function x for i in nrow x for j in ncol x if i j a lt x i j print a
  • pandas 枢轴更改 dtype

    使用 pandas hub table 创建新数据框后 数据类型从 int32 更改为 float 原始数据框 df pd DataFrame from dict my dict orient columns dtype i4 print
  • 当 WooCommerce 中所选变体缺货时显示表单

    在 WooCommerce 中联系表格 7 插件 https wordpress org plugins contact form 7 我使用以下代码在单个产品页面上向我的缺货简单产品添加了一个表单 add action woocommer
  • Java多重继承

    为了完全理解如何解决 Java 的多重继承问题 我有一个需要澄清的经典问题 假设我有课Animal这有子类Bird and Horse我需要上课Pegasus延伸自Bird and Horse since Pegasus既是鸟又是马 我认为