2016-07-02 96 views
0

屬性,在這裏我用一個設計模式是這樣我有幾個項目最近。然而,這看起來很笨拙 - 似乎應該有一些方法來簡單地覆蓋屬性本身,以避免在每個延伸A的類中重複getProperty()方法。覆蓋在Java在Java中

事情是這樣的:

public abstract class A { 
public static abstract int PROPERTY; 
} 

public class B extends A { 
@Override 
public static int PROPERTY = 5; 
} 

是這樣的可能嗎?如果是這樣,怎麼樣?否則,爲什麼不呢?

+1

您不會覆蓋Java中的類變量,而是隱藏它們。重寫是例如方法。隱藏與重寫不同 – Idos

+0

雖然您可以使用「靜態」塊:「靜態」屬性= 5; }' – Idos

+0

我不認爲'static'對於這個問題是必不可少的。對我而言,OP看起來似乎想知道是否有辦法提供不同的價值而無需替換整個方法。投票重新開放。 – dasblinkenlight

回答

4

您不能「覆蓋」字段,因爲只有方法可以覆蓋(並且它們不允許爲靜態或私有)。

你可以實現你想通過該方法非抽象,並提供受保護的領域子類設置,這樣的效果:

public abstract class A { 
    protected int propValue = 5; 
    public int getProperty() { 
     return propValue; 
    } 
} 

public class B extends A { 
    public B() { 
     propValue = 13; 
    } 
} 

這一招讓A的子類的‘推’一個新的價值在他們的超類的上下文中,得到類似於「覆蓋」的效果而沒有實際的覆蓋。