2014-04-23 140 views
-3
public class DefaultCalculator 
{ 
    public Boolean isEligibleForNewProcess(Z z) 
    { 
     // Do Something 
    } 

    public BigDecimal getY(P p, Q q) 
    { 
     return y; 
    } 

    public BigDecimal getX(P p, Q q) 
    { 
     return x; 
    } 
} 

public class ExtendedCalculator extends DefaultCalculator 
{ 
    public Boolean isEligibleForNewProcess(Z z) 
    { 
     // Do Something diffrent 
    } 

}爪哇 - 扩展类

我有一个工厂基本上实例的这一个。

public class CalculatorFactory 
{ 

    @Autowired 
    DefaultCalculator defaultCalculator; 

    @Autowired 
    ExtendedCalculator extendedCalculator; 


    public DefaultCalculator getCalculator(Z z){ 
     switch (z.getType()) { 
     case a: 
      return defaultCalculator; 
     case b: 
      return extendedCalculator; 
     default: 
      return null; 
     } 
    } 
} 

我有计算器工厂。 我有p和q。我可以在DefaultCalculator中使用这些函数,而不需要DefaultCalculator的对象吗? 我想使用没有Z的getY和getX函数。

我可以这样做吗?我应该如何改变类的设计?

+0

为什么downvote?请发表评论 –

+0

你的问题不清楚。 “那些功能”涉及哪些功能?你是什​​么意思,你想使用没有Z的getY和getX?他们的输入不依赖于Z. –

回答

1

你的问题并不十分清楚,但如果我正确理解你的意思,你问你能用DefaaultCalculator方法从ExtendedCalculator;如果是这样,答案是肯定的,来自父类的公共和受保护的方法和变量在扩展类中可用。您可以访问getYgetX。至于你在说什么Z我不知道如何与我认为你问的相关。

+0

不,我的意思是我怎样才能使用DefaultCalculator的getX和getY方法。我所有的是CalculatorFactory对象,p和q –

+0

不创建DefaultCalculator的实例,我能想到的唯一方法就是使这些方法成为静态并将它们调用为'DefaultCalculator.getX(p,q);'。 – user3507600

+0

我们可以以某种方式改变完整的设计以适应需要吗? –

0

问题不是很清楚。我知道你有DefaultCalculator与两种方法getX(P p, Q q)getY(P p, Q q),你想调用这些方法而不创建类型为DefaultCalculator的新对象。

基本上,如果你想调用某个类的方法,你必须创建该类的一个对象。但你可以做下列之一:

(注:我不知道你正在尝试做的,但可能有助于)

1 - 我可以看到你有类ExtendedCalculator 哪延伸DefaultCalculator这样你就可以创建对象ExtendedCalculator和调用的方法getX(P p, Q q)getY(P p, Q q)从该对象如下:

ExtendedCalculator someObj=new ExtendedCalculator(); 
someObje.getX(someVar1,someVar2); 

2 - 你可以创建static方法和类名直接调用。