2012-06-16 3 views
0

자바 상속에 대한 질문 ... 우리는 슈퍼 클래스의 필드를 선언 protected을 사용해야하는 이유 우리는, 서브 클래스에서 super 키워드를 사용하여 수퍼 클래스의 private 필드를 변경 할 수 있기 때문에슈퍼 보호 자바

class Base { 
    private int val = 10; 
} 

class Derive extends Base{ 
    public void setVal(int value) { 
     super.val = value; 
    } 
} 

?

+1

우선 대답은 컴파일되지 않을 것이므로 개인 필드에 액세스 할 수 없으며 가능하다면 내부적으로 setters/getters를 사용하십시오. –

답변

4

당신은 그렇게 할 수 없습니다. DeriveBase 안에 중첩 된 클래스로 선언되지 않으면 (제공된 코드는 컴파일되지 않습니다.) 매우 드문 경우입니다.

는이 같은 오류가 발생한다 :

error: val has private access in Base 
+0

예, 고마워요. 테스트를 위해 중첩 된 정적 클래스를 사용했습니다. 접근성을 다시 테스트하기 위해이 작업을해서는 안된다고 생각했습니다. – alaska

0

슈퍼 부모의 생성자를 호출하는 데 사용되는 참조 변수입니다.

+0

super는 가장 확실하게 변수가 아닙니다. – matiash

+0

@matiash 미안한 참조 변수 –

0

클래스를 상속받은 경우에도 클래스 외부에 액세스 할 수없는 코드를 확인하십시오.