2016-08-25 3 views
1

개인 변수가 상속되지 않는다는 것을 알고 있으므로 내 하위 클래스에서 어떻게 액세스 할 수 있습니까?어떻게 부모 클래스의 private 변수에 액세스 할 수 있습니까?

class A{ 
    private int i = 5; 
    // more code 
} 
class B extends A{ 
    public int toInt(){ 
     return super.i; 
    } 
} 
+5

당신은하지 않습니다. 그들은 당신이 그들에게 접근 할 수 있다면 사적이지 않을 것입니다 ... –

+0

절대적으로해야한다면 getters/setters (public/protected methods)를 사용할 수 있습니다. 그러나 당신이 그것을 요구할 이유가 없습니다. – iMan

+0

네, 문제는 내가 그들에게 접근해야하는 곳입니다. 고마워요. 내가 시도해 볼게 :) –

답변

5

일반적으로 당신은 하위 클래스가 필드를 볼 수있는 iprotected로 표시 할 것입니다.

또 다른 접근법은 get 스타일 기능을 작성하는 것입니다. 특히 하위 클래스가 필드에 쓰지 못하게하려는 경우가 있습니다. put 스타일의 함수를 쓰면 캡슐화가 실제로 실패합니다.

반사도private을 우회하는 또 다른 방법을 제공하지만이 방법을 사용하는 것은 권장되지 않습니다.

+0

욕실에 감사드립니다. "get"기능을 제공합니다. –

+0

전용 수정자를 사용하여 세트를 사용하거나 캡슐화 위반을 제한하지 않을 수 있습니다. – c0der

+0

@JustinMiddleton이 답변을 공평하게 답변으로 표시합니다 (문제가 해결 된 경우). –

3

일반적으로 할 수 없으며해서는 안됩니다. 이것이 변수가 private 인 이유입니다.

기본 클래스를 구현하여 해당 하위 클래스가 private 멤버에 액세스 할 수 있도록 허용하려는 경우 protected 접근 자 메서드 (getter 또는 setters)를 구현합니다. 필드를 protected으로 표시 할 수도 있지만 시작하는 것을 권장하지 않습니다. 비공개 분야를 만드는 데는 진지한 이유가 필요합니다.

반사 API를 사용하는 자바 가능하다 "해결 방법"

Field f = A.class.getDeclaredField("i"); 
f.setAccessible(true); 
f.get(); 
관련 문제