2016-08-24 7 views
-2

하위 클래스 생성자에서 보호 된 최종 필드를 설정할 수없는 이유는 무엇입니까?Java 하위 클래스 생성자에서 보호 된 최종 필드를 설정하는 것이 허용되지 않는 이유는 무엇입니까?

예 :

class A { 
    protected final boolean b; 

    protected A() { 
     b = false; 
    } 
} 

class B extends A { 
    public B() { 
     super(); 
     b = true; 
    } 
} 

내가 않을 것, 그것은 어떤 경우에는 이해 것이라고 생각?

+0

final 필드는 생성자 또는 클래스 초기화시에만 초기화 할 수 있습니다. – ravthiru

답변

5

최종 필드 값을 변경할 수 없기 때문입니다.

하지만 당신은 정말 그 자체로 그것을 다른 값으로 원한다면, 당신이 할 수있는하십시오 final 필드의 정의는 한 번만 할당 할 수 있기 때문에

class A { 
    protected final boolean b; 

    protected A() { 
    this(false); 
    } 
    protected A(boolean b) { 
     this. b = b; 
    } 
} 

class B extends A { 
    public B() { 
     super(true); 
    } 
} 
+1

나는 생성자에 대해 이야기하고있다. – stonar96

+0

@ stonar96 수퍼 클래스의 생성자를 호출 할 때'b'의 값을 설정합니다. 하위 클래스에서 다른 값으로 설정하려면 해당 값을 수퍼 클래스 생성자에 전달해야합니다. – user902383

1

그것은 할 수 없습니다. A()에 보호 필드가 이미 할당되어있는 경우 B()에서 다시 할당하면 생성자에서 완료 되더라도 여전히 "한 번만"위반됩니다.