2014-04-23 104 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方法和類名直接調用。