这是我现在面临的实际问题。
我有课,比方说Foo
这个类定义了一个名为的方法getBar
返回一个Bar
实例。班上Bar
被定义在里面Foo
并且 并 被声明public static final
。我想做的是定义一个类MyFoo
延伸Foo
但我也想延长Bar
with MyBar
通过添加我自己的功能(方法、属性等)。
我也想要getBar
回来MyBar
.
问题是Bar
是最终的。这是我想要做的事情的说明:
public class Foo {
Bar bar = new Bar();
public Bar getBar(){
return bar;
}
....
public static final class Bar {
}
}
我想做的是:
public class MyFoo extends Foo {
public MyBar getBar(){ // here I want to return an instance of MyBar
}
public static final class MyBar extends Bar { // That's impossible since Bar is final
}
}
我怎样才能做到这一点?
[编辑]我正在为我的问题添加更多细节。
我实际上正在为 Jenkins 开发一个插件,经过搜索,我意识到有一个插件可以提供我想做的基本功能,Foo
and Bar
。我要定制Foo
and Bar
,所以它可以满足我的需求。
Foo 是插件的主类,并扩展了一个名为 Builder 的类。 Foo 定义了一个名为perform
其中包含执行构建的所有操作。Bar
包含用于配置目的的操作,并且 Foo 需要 Bar 来获取这些信息。
所以我想做的是将 Foo 扩展为MyFoo
并添加一些配置MyBar
。正如你所看到的,MyFoo
需要通过调用来获取这些配置getBar();
第二件事是我无法控制实例化MyFoo
and MyBar
阻碍我的是我无法扩展 Bar。我怎样才能做到这一点?
基本上你不能。看起来像是开发商设计的Bar
旨在不扩展它 - 所以你不能扩展它。您需要寻找一种不同的设计 - 可能是一种不太使用继承的设计......当然,假设您无法更改现有代码。
(如果不了解这里的真正目标——整个系统的设计,就很难给出更具体的建议。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)