2011-08-03 3 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); 
    } 
} 

(:/첫 번째 줄에 있어야합니다 슈퍼에 전화를()) 작동하지 않았다. 그러나 이것은 기본적으로 내가 원하는 행동입니다. 이것을 할 수있는 좋은 방법이 있습니까? 감사!

+0

왜 1에 X를 설정 한 후 슈퍼 클래스를 통해 1 X를 설정하려고? –

+2

'super (1)'이 왜 당신에게 받아 들일만한 해결책이 아닌지 이해가 안됩니다. 그 부분을 설명해 주시겠습니까? –

+0

글쎄, 내가 생각했던 바보 같은 문제를 과장하여 보았다. 고마워. – Steve

답변

6

당신은

super(1); 

그래서 대신 설정 X

, 당신은 가치를 전달하는 할 수 있습니다.

+0

답변은 정확하지만 OP의 명백한 이해 부족은 무시합니다. –

0

자바 컴파일러가 없지만이 코드에서 x = 1 두번으로 설정하려고합니다. @Kal 말했다 슈퍼를하는 것처럼

x = 1; 

그리고

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

(1), X = 1이 작동하지 않습니다 않는.

+1

* "하나 선택"*. 사실, 두 번째 것을 선택하십시오. 처음에는 어쨌든 그 자체로 실패 할 것입니다. –

+0

고마워요, @ 마크. 그것을 바로 잡을 것입니다. 한동안 자바 결승전에 출전하지 못했습니다. –

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; 
    } 
} 
관련 문제