替代多重继承来扩展库
Alternative to Multiple Inheritance to Extend Library
我目前正在尝试延长 WPILib。不幸的是我需要多重继承。
我画了一个问题的uml图(原谅我蹩脚的笔迹)
正如你看到的红色箭头,我需要从两个 类.
延伸
我无法更改 WPI 框内的任何内容,ICommand
中的 requires
方法需要 CommandBase
中的一些函数,因此我无法将其设为 [=] 中的默认值11=].
我该如何解决这个问题?
如果你想在这里尝试一些东西my github repo。
使用 Interface
因为 java is not supports Multiple Inheritance
。接口是抽象类型,指定 类 要实现的行为。因为它们是抽象的,所以接口不包含对其行为的详细说明。相反,类 提供接口行为的具体实现。
接口有许多定义特征:
与类不同,您不需要实例化接口。相反,类
实现接口
接口仅包含 public 常量定义和方法头文件
接口只能扩展其他接口,不能类
接口可以扩展多个接口,类可以实现
多个接口
如果我没理解错的话,您希望您的自定义 classes(SequentialCommandGroup、ParallelCommandGroup)从库 classes 扩展,但也希望您自己实现该“命令”部分。
你当然不能在 Java 中有多重继承,但我认为你可以在这里利用 Proxy pattern。
您的 classes 仍将继承自库 classes,但 ICommand 接口的实现可以委托给 Command 对象。
示例:
public class MyParallelCommandGroup extends ParallelCommandGroup implements ICommand {
private Command commandProxy;
public MyParallelCommandGroup() {
// instantiate commandProxy here, or inject it as constructor param
}
@Override
public void requires() {
commandProxy.requires();
}
}
您甚至可以将整个命令 class 提取到接口并在您的代理 class 中实现它。我不确定这是否涵盖您的用例,但也许它会帮助您找到合适的解决方案。
我目前正在尝试延长 WPILib。不幸的是我需要多重继承。
我画了一个问题的uml图(原谅我蹩脚的笔迹)
正如你看到的红色箭头,我需要从两个 类.
延伸我无法更改 WPI 框内的任何内容,ICommand
中的 requires
方法需要 CommandBase
中的一些函数,因此我无法将其设为 [=] 中的默认值11=].
我该如何解决这个问题?
如果你想在这里尝试一些东西my github repo。
使用 Interface
因为 java is not supports Multiple Inheritance
。接口是抽象类型,指定 类 要实现的行为。因为它们是抽象的,所以接口不包含对其行为的详细说明。相反,类 提供接口行为的具体实现。
接口有许多定义特征:
与类不同,您不需要实例化接口。相反,类 实现接口
接口仅包含 public 常量定义和方法头文件
接口只能扩展其他接口,不能类
接口可以扩展多个接口,类可以实现 多个接口
如果我没理解错的话,您希望您的自定义 classes(SequentialCommandGroup、ParallelCommandGroup)从库 classes 扩展,但也希望您自己实现该“命令”部分。
你当然不能在 Java 中有多重继承,但我认为你可以在这里利用 Proxy pattern。
您的 classes 仍将继承自库 classes,但 ICommand 接口的实现可以委托给 Command 对象。
示例:
public class MyParallelCommandGroup extends ParallelCommandGroup implements ICommand {
private Command commandProxy;
public MyParallelCommandGroup() {
// instantiate commandProxy here, or inject it as constructor param
}
@Override
public void requires() {
commandProxy.requires();
}
}
您甚至可以将整个命令 class 提取到接口并在您的代理 class 中实现它。我不确定这是否涵盖您的用例,但也许它会帮助您找到合适的解决方案。