2016-10-20 99 views
1

所以我正在爲我的Java類工作,我無法想出一種方法來引用父類中的字段而不必通過它們通過構造函數。Java:在父類中引用子字段

比如我想我父類有這樣的方法:

@Override 
    public String getImageFileName() {  
     String result = IMG_DEAD; 
     if (isAlive()) { 
      result = IMG_ALIVE; 
     } 
     return result; 
    } 

我想IMG_DEAD和IMG_ALIVE的字符串在我的孩子被定義,因爲每個孩子都會有不同的。

這樣做的最好方法是什麼?我試過使用靜態字段,但我總是最終引用我的父母。

我得到它的工作只是通過構造函數傳遞值,但我寧願不必這樣做,如果有更好的方法。這些變量也應該是靜態的,因爲它們對於每個類都是不變的。

+0

https://www.tutorialspoint.com/java/java_polymorphism.htm –

回答

2

這聽起來像每個孩子需要提供的具體細節。要做到這一點,最好的辦法通常是在孩子覆蓋父的方法,像這樣:

protected String imageFileName(boolean alive) { 
    return alive ? DEFAULT_IMG_ALIVE : DEFAULT_IMG_DEAD; 
} 

然後,在你的子類,重寫方法:

@Override 
protected String imageFileName(boolean alive) { 
    return alive ? GRUE_IMG_ALIVE : GRUE_IMG_DEAD; 
} 

如果你想到需要來自孩子的圖像,沒有默認情況下,改爲使用父方法abstract

+0

這個問題是我的孩子們都會用完全相同的方法重寫這個方法,這對我來說似乎是失敗了繼承方法的目的。除此之外,如果我想改變這種方法,我將不得不在所有的孩子中改變它。我希望有一種方法可以覆蓋子項中的字段,但不必覆蓋方法。 – BananaPineapple

+0

@Robert相應地,用「完全相同的方法」覆蓋「多態性的整個點」 - 您可以爲每個需要的類提供替代行爲。覆蓋領域將是一個嚴重的頭痛,你仍然有完全相同的假設的未來維護問題。 – chrylis