2013-02-04 3 views
0

protected String 변수를 가진 abstract 수퍼 클래스가 있습니다. 수퍼 클래스에서는 초기화되지 않습니다.하위 클래스의 추상 수퍼 클래스 필드 참조

내가 원하는 것은 초기화하고 하위 클래스에서 사용하는 것입니다. 상속의 요점은 다른 컨텍스트에서 클래스와 자신의 분야를 재사용하기 때문에,

public class MySubclass extends MyAbstractSuperclass {   
     thing = "i'm a thing"; 
     [...] 
    } 

은 간단한데 : 그래서, 나는 이런 식으로 뭔가가있다. 하지만 그게 잘못되었습니다 : Syntax error on token "thing", VariableDeclaratorId expected after this token.

서브 클래스 초기화를 대괄호로 묶어서 컴파일 할 수 있습니다. 제가 알고 싶은 것은 첫 번째 방법이 왜 틀린 지, 그리고 괄호가 그것을 고치는 이유입니다. 어떤 도움을 주셔서 감사합니다.

편집 : 나는 이것을 생성자를 사용하여 해결할 수있는 팁을 고맙게 생각합니다. 그러나, 나는 아직도 꽤 똑똑한 것처럼 보이기 때문에 실제로 이런 식으로 수퍼 클래스 필드를 사용하는 것이 잘못된 것에 대해 궁금합니다. 또한 중괄호가이를 수정하는 이유는 무엇입니까? 예를 들어 외부와 같은 중괄호로 문장을 둘러싸는 것이 정확히 무엇을 의미합니까? 루프 구조?

+1

중괄호 [instance initializer] (http://stackoverflow.com/questions/6763550/why-java-instance-initializers)를 작성 중입니다. – GriffeyDog

답변

1

내가 알고 싶습니다 어떤 것은 왜 첫 번째 방법은 잘못되었으며, 괄호로 수정하는 이유는 무엇입니까? 어떤 도움을 주셔서 감사합니다.

public class MySubclass extends MyAbstractSuperclass {   
    thing = "i'm a thing"; 
    [...] 
} 

당신은 여기에 문을 텍스트로 변수 thing의 값을 설정하려고합니다. 당신은 여기서 문장을 할 수 없으며 여기서는 변수 선언 만 할 수 있습니다.

public class MySubclass extends MyAbstractSuperclass { 
    {  
     thing = "i'm a thing"; 
    } 
    [...] 
} 

이제 이니셜 라이저 블록이 있습니다.이 블록은 생성자 이전의 명령문으로 실행됩니다. 따라서 가시성이 보호되어 있으므로 thing에 액세스 할 수 있습니다. 예를 들어 여기를 참조하십시오 : http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

2

이 스칼라, 당신은 명시 적으로 생성자를 작성해야되지 않습니다

public class MySubclass extends MyAbstractSuperclass {   
    public MySubclass() { 
     thing = "i'm a thing"; 
     [...] 
    } 
} 

또는 매개 변수와 함께 생성자를 사용

public abstract class MyAbstractSuperclass { 

    protected final String thing; 

    protected MyAbstractSuperclass(String thing) { 
     this.thing = thing; 
    } 

} 

public class MySubclass extends MyAbstractSuperclass { 
    public MySubclass() { 
     super("i'm a thing"); 
    } 
} 
+0

글쎄, 그렇게 할 수 있습니다. 하지만 주위에 괄호를 넣으면 컴파일됩니다. 왜 그런가요? 왜 생성자가 작동하는지 이해합니다. 그러나 나는 if type 키워드와 같은 것에 대한 언급 없이는 그러한 문장 주위에 중괄호를 보지 못했습니다. – aearon

+1

@aearon 참조 : http://stackoverflow.com/questions/2007666 및 http://stackoverflow.com/questions/1958636 –

0
public class MySubclass extends MyAbstractSuperclass {   

     public MySubclass(){ 
     super.thing= "i'm a thing"; 
     } 
    } 
관련 문제