개인 변수가 상속되지 않는다는 것을 알고 있으므로 내 하위 클래스에서 어떻게 액세스 할 수 있습니까?어떻게 부모 클래스의 private 변수에 액세스 할 수 있습니까?
즉
class A{
private int i = 5;
// more code
}
class B extends A{
public int toInt(){
return super.i;
}
}
개인 변수가 상속되지 않는다는 것을 알고 있으므로 내 하위 클래스에서 어떻게 액세스 할 수 있습니까?어떻게 부모 클래스의 private 변수에 액세스 할 수 있습니까?
즉
class A{
private int i = 5;
// more code
}
class B extends A{
public int toInt(){
return super.i;
}
}
일반적으로 당신은 하위 클래스가 필드를 볼 수있는 i
protected
로 표시 할 것입니다.
또 다른 접근법은 get
스타일 기능을 작성하는 것입니다. 특히 하위 클래스가 필드에 쓰지 못하게하려는 경우가 있습니다. put
스타일의 함수를 쓰면 캡슐화가 실제로 실패합니다.
반사도도 private
을 우회하는 또 다른 방법을 제공하지만이 방법을 사용하는 것은 권장되지 않습니다.
욕실에 감사드립니다. "get"기능을 제공합니다. –
전용 수정자를 사용하여 세트를 사용하거나 캡슐화 위반을 제한하지 않을 수 있습니다. – c0der
@JustinMiddleton이 답변을 공평하게 답변으로 표시합니다 (문제가 해결 된 경우). –
일반적으로 할 수 없으며해서는 안됩니다. 이것이 변수가 private
인 이유입니다.
기본 클래스를 구현하여 해당 하위 클래스가 private 멤버에 액세스 할 수 있도록 허용하려는 경우 protected
접근 자 메서드 (getter 또는 setters)를 구현합니다. 필드를 protected
으로 표시 할 수도 있지만 시작하는 것을 권장하지 않습니다. 비공개 분야를 만드는 데는 진지한 이유가 필요합니다.
반사 API를 사용하는 자바 가능하다 "해결 방법"
Field f = A.class.getDeclaredField("i");
f.setAccessible(true);
f.get();
당신은하지 않습니다. 그들은 당신이 그들에게 접근 할 수 있다면 사적이지 않을 것입니다 ... –
절대적으로해야한다면 getters/setters (public/protected methods)를 사용할 수 있습니다. 그러나 당신이 그것을 요구할 이유가 없습니다. – iMan
네, 문제는 내가 그들에게 접근해야하는 곳입니다. 고마워요. 내가 시도해 볼게 :) –