2016-03-06 24 views
-5

在類中我會繼承這些方法protected override,以便改變它使用的方法的行爲。以下顯示的是練習,對嗎?如果不是,爲什麼?將方法置於「返回」中,使用Java,是否正確?

簡單類型的和不可改變的對象:

class A{ 
    (...) 
    public int aA(){ 
     int b=1; 
     return this.bB(b); // It is about this place. 
    } 

    protected int bB(int b){ 
     b=2*b; 
     return b; 
    } 
    (...)  
} 

class B extends A{ 
    (...) 
    @Override 
    protected int bB(int b){ 
     return b-1; 
    } 
} 

在A類,我想使用的方法BB()的方法AA(),兩種方法在此類實施。方法bB()我把「返回」方法aA()。然後B定義一個繼承自A的類,並覆蓋方法bB()。因此,類B中的方法aA()與A類中的方法aA()不同。

如果將方法返回,返回具有修改能力的對象,該怎麼辦? 因爲它將靜態方法作爲回報? 這是否對併發編程有任何影響?

+0

您只能在您的示例中返回整數。 – Basilevs

+1

https://en.m.wikipedia.org/wiki/Template_method_pattern – Basilevs

+2

瞭解如何返回lambda表達式。 –

回答

1

您似乎在問上述代碼是否是編寫覆蓋超類中方法的方法的正確方法。

是的,這是正確的做法。

是的,這是一個很好的方式,以「改變行爲」 ......雖然你只改變了行爲的新類(B

如果有能力返回的對象要修改什麼?

相同的答案。

就像是返回靜態和非靜態方法一樣?

編號靜態方法是非多態的。您無法重寫靜態方法。

在你的例子中,如果bB是靜態的,那麼@Overrides註釋會給你一個編譯錯誤。如果您將其刪除,您會發現撥打 aA的電話將始終呼叫A.bB,並且永遠不會撥打B.bB

請注意,調用語法爲this.someStaticMethod(...)的靜態方法是合法的,但風格很差。看起來這個調用會是多態的,但事實上並非如此。

這是否對併發編程有任何影響?

沒有特別的含義。


另一方面,如果您確實在詢問返回其他方法的方法......您的示例代碼不會這樣做。

+0

我並不是說重寫靜態方法和插入靜態方法。 –

+0

標題不準確,已更改。我認爲在帖子中我很好地解釋了我的意思,但顯然還沒有到最後。 –

+0

問題是*「把方法作爲回報」*和*「把這個方法作爲回報」*都是糟糕的英語,我很難理解你的真正含義。而你的示例代碼沒有幫助,因爲它不會返回一個方法......如果這是你實際詢問的。 –

相關問題