作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个类,一个依赖于硬件,一个不依赖于硬件(我们分别称它们为 HardwareDependent 和 HardwareIndependent)。硬件相关类扩展了硬件独立类。现在我有另一个类,它至少必须是 HardwareIndependent 的扩展,但我希望它尽可能成为 HardwareDependent 的扩展,以便它可以利用附加功能。是否有可能使用反射或其他方式来实现这一目标?还是这在技术上完全不可能?我想如果一切都失败了,我可以写两次这个类,但在我看来这是一种无效的方法。提前感谢您的帮助。
最佳答案
继承是在编译时固定的。
听起来您不希望新类扩展 HardwareIndependent 或 HardwareDependent;您希望它使用 一个可以是其中之一的对象。你想要组合而不是继承。你是第三类(我们称之为 HardwareComposite)有一个 HardwareIndependent 的引用。然后,您可以在运行时使用 instanceof 运算符检查它是否是 HardwareDependent,如果是,则将其转换为 HardwareDependent 并使用提供的附加功能。
如果您的设计迫使您混合使用继承和组合的概念,您可能会研究 Facade 和 Factory 模式。
关于java - Java运行时基类的Runtime determination,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6710082/
我是一名优秀的程序员,十分优秀!