【问题标题】:Inherit class without parent type in Java在Java中继承没有父类型的类
【发布时间】:2019-02-28 21:14:29
【问题描述】:

如何在不采用父类型的情况下从另一个类继承?

例如我希望能够让Car 采用Vehicle 的所有方法和属性而不被识别为Vehicle 类型的Object。

在 Java 中是否有一种方便的方法可以在不复制所有方法和属性的情况下做到这一点?

【问题讨论】:

  • 也许我不明白这个问题,但您可能想定义 interface Vehicle 并让 Car 实现该接口。
  • 因此,您需要委托而不是继承。 Java 没有方便的方式来实现委托。
  • 您可以将车辆的方法提取到车辆和汽车将使用的接口。那么你的车不必是车辆

标签: java inheritance types


【解决方案1】:

这取决于您对方便的定义。您正在寻找 Forwarding/Composition/Aggregation,本质上是:

class B {
  A a;
  T foo() { return a.foo(); }
}

这意味着A 中定义的所有方法都需要在B 中复制。

这经常出现在关于Inheritance vs. Aggregation 的讨论中。

【讨论】:

    【解决方案2】:

    我认为您想要做的是使用委托模式,对于本机 Java 来说没有简单的方法可以做到这一点,您可以使用 project Lombok Delegate 使其非常方便。

    【讨论】:

      【解决方案3】:

      如果 Car 和 Vehicle 继承自一个共同的专利,它们将具有相同的方法,而不是 Car 是一个 Vehicle 并且没有重复。

      【讨论】:

        【解决方案4】:

        你必须使用像 javassist 这样的字节码反向危害库是非常困难的。 这里有一些使用 javassist 操作 java 类文件的例子

        http://www.javassist.org/tutorial/tutorial2.html#intro

        【讨论】:

          【解决方案5】:

          如果您使用的是 Spring Framework,则可以为此目的定义抽象 bean https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-child-bean-definitions

          【讨论】:

            猜你喜欢
            • 2016-02-09
            • 2015-03-14
            • 2015-11-25
            • 1970-01-01
            • 1970-01-01
            • 2020-02-09
            • 1970-01-01
            • 2021-10-11
            • 2023-03-27
            相关资源
            最近更新 更多