参考here
A是预编译的Java类(我也有源文件) B是我正在创作的Java类 B延伸A.
如何实现逻辑,以便A可以调用B具有的方法 以下是条件:
如上所述,如果需要,我可以修改A. 什么可能解决方案?
答案 0 :(得分:40)
类A
应该定义它要调用的方法(可能是抽象的方法,A应该是一个抽象类,根据Paul Haahr的优秀guide); B
可以(事实上具体必须,如果方法是抽象的)覆盖这些方法。现在,从A
中的其他方法调用这些方法时,如果发生在B类的实例中,则转到B的覆盖。
整体设计模式称为Template Method;要重写的方法通常称为“钩子方法”,执行调用的方法称为“组织方法”。
答案 1 :(得分:15)
是的,如果你覆盖了super / base-classes的函数,那么对基类中 in 函数的调用将转到child / derived类。在我看来,这似乎是一个糟糕的设计,但你去了。
class Base
{
public void foo()
{
doStuff();
}
public void doStuff()
{
print("base");
}
}
class Derived extends Base
{
@Override
public void doStuff()
{
print("derived");
}
}
new Derived().foo(); // Prints "derived".
显然,所有Derived
的方法都必须已经在Base
中定义,但是否则(没有内省)这样做在逻辑上是不可能的。
答案 2 :(得分:1)
我宁愿犹豫不决。如果我错了请纠正我然后我会删除,但听起来你想要保持A对象和B对象。如果它们确实不是同一个对象,那么你必须做的“捆绑在一起”(这是一个科学术语)会非常难看。