【发布时间】:2011-06-09 16:32:13
【问题描述】:
我有几个类可以扩展其他类。他们都有一个共同的方法result。如果我有foobarbaz 的实例,是否可以调用其父/祖父的result 方法?
public class Foo {
protected int resultA;
public void calc(){ resultA=...}
public void result(){ return resultA; }
}
public class Foobar extends Foo{
protected int resultA;
public void calc(){
super.calc();
resultB=...;
}
public void result(){ return resultB; }
}
public class Foobarbaz extends Foobar{
protected int resultA;
public void calc(){
super.calc();
resultC=...;
}
public void result(){ return resultC; }
}
我要解决的问题是每个类都进行一些额外的计算,除了它的父类。如果用户想要所有 3 个对象的结果,CalculationManager 知道只有 Foobarbaz 需要被初始化和计算。然后它将对 Foobarbaz 的引用返回给请求 Foo 的任何人,因为 Foobarbaz 也会有 Foo 的结果。
类似:
CalculationManager.add(Foo,Foobar,Foobarbaz);
//The following 3 calls return the same reference to a Foobarbaz object
Foo res1=CalculationManager.get(Foo);
Foobar res2=CalculationManager.get(Foobar);
Foobarbaz res3=CalculationManager.get(Foobarbaz);
CalculationManager.doCalc();
//Iterate over each object to get result with the same method .result()
res1.result(); //---> resultA
res2.result(); //---> resultB
res3.result(); //---> resultC
【问题讨论】:
-
愚蠢的问题,但你有什么工作?我看起来可能会。
-
我不能向你保证。 Java 有一些类似于动态方法调用的东西,即即使您将狗标记为猫,然后调用 getFood(),它也会返回 dogFood 而不是 catFood。 *请不要把狗当猫
-
您尝试这样做的事实表明您的程序中可能存在概念缺陷。因此,您应该花时间修复该概念缺陷,而不是解决问题。无论如何,答案中的示例代码将允许您这样做。
-
如果这是对使用 Java 的 OOP 的调查,那么我认为您已经得到了足够多的回应来让您忙碌和快乐;-) 如果您正在尝试处理现实生活中的问题最好向我们提供有关这方面的详细信息。可能还有其他方法可以实现您想要实现的目标(实现接口、某种设计模式……)。