如何在不采用父类型的情况下从另一个类继承?
例如,我希望能够让Car
采用Vehicle
的所有方法和属性而不会被识别为类型Vehicle
的对象。
在Java中是否有一种简便的方法,而无需重复所有方法和属性?
答案 0 :(得分:6)
这取决于您对便捷性的定义。您实际上是在寻找 Forwarding /合成/聚合,
class B {
A a;
T foo() { return a.foo(); }
}
这意味着A
中定义的所有方法都必须在B
中重复。
关于Inheritance vs. Aggregation的讨论经常提到这一点。
答案 1 :(得分:3)
我认为您想做的是使用委托模式,使用本机Java没有简单的方法,可以使用project Lombok Delegate使其真正方便。
答案 2 :(得分:2)
如果“汽车”和“车辆”是从共同的专利继承而来的,那么它们将具有相同的方法,而“汽车”不是“车辆”并且没有重复。
答案 3 :(得分:0)
很难使用像Javassist这样的危害字节码的反向库。 这里有一些使用javassist操作Java类文件的示例
答案 4 :(得分:0)
如果您使用的是Spring Framework,则可以为此目的定义抽象bean https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-child-bean-definitions