2011-08-03 33 views
0

我有一個類似於In Java, why can't I declare a final member (w/o initializing it) in the parent class and set its value in the subclass? How can I work around?的問題,但需要不同的解決方案。就像在上面的例子中,我想在超類中聲明一個變量爲Final,但我希望子類給它賦值。是什麼讓我的問題不同,但我不希望將值傳遞給子類,我希望子類「知道」它的值,所以上述解決方案對我無效。然後我試圖做到這一點:將最終值推遲到子類java

public class Superclass{ 
    public final int x; 
    public Superclass(int x){ 
     this.x = x; 
    } 
} 
public class Subclass extends Superclass{ 
    public Subclass(){ 
     x = 1; 
     super(x); 
    } 
} 

......哪些沒有工作(調用super()必須在第一行:/)。但這基本上是我想要的行爲。有沒有一個好的方法來做到這一點?謝謝!

+0

你爲什麼x設置爲1,然後試圖通過超類集合X爲1? –

+2

我不明白爲什麼'super(1)'不適合你。你能解釋那部分嗎? –

+0

好吧,看來我已經推翻了這個問題,我猜想是愚蠢的問題。多謝你們。 – Steve

回答

6

你可以做

super(1); 

所以不是x設置,要傳遞的價值。

+0

答案是正確的,但忽略了OP顯然完全缺乏理解。 –

0

我沒有一個java編譯器方便,但您試圖在此代碼中設置x = 1 兩次

x = 1; 

而且

super(x); //==> this.x = x 

不要爲@Kal說,做超(1),當x = 1將無法正常工作。

+1

*「挑選一個」*。其實,挑第二個。無論如何,第一個會自行失敗。 –

+0

謝謝@Mark。將糾正它。有一段時間沒有玩過Java決賽。 –

1

上面的一個替代:

class Superclass{ 
    public final int x; 

    public Superclass(int x){ 
     this.x = x; 
    } 

    public static Superclass createNew(Integer y) { 
     return new Superclass(y); 
    } 

    public void print() { 
     System.out.println(this.x); 
    } 
} 
class Subclass extends Superclass{ 
    public Subclass(int x) { 
     super(process(x)); 
    } 

    public static Integer process(Integer y) { 
     if (y < 100) 
      y += 100; 
     return y; 
    } 
}