문제

수업이 있다고 가정 해 봅시다 foo 개인 인스턴스 변수가 있습니다 bar.

이제 다른 수업을 갖도록하겠습니다. baz, 어느 extends foo. 비 정적 메소드를 사용할 수 있습니다 baz 입장 foo의 변수 bar 접근 자 메소드가 정의되지 않은 경우 foo?

그건 그렇고 나는 Java에서 일하고 있습니다.

도움이 되었습니까?

해결책

아니요 Java 언어 사양, 3 판:

6.6.8 예 : 개인 필드, 방법 및 생성자

개인 클래스 멤버 또는 생성자는 멤버 또는 생성자의 선언을 동봉하는 최상층 클래스 (§7.6)의 본문 내에서만 액세스 할 수 있습니다. 서브 클래스에 의해 상속되지 않습니다.

그러나이 언어 제한에 관계없이, 당신은 당신입니다 ~할 수 있다 반사를 통해 개인 필드에 액세스하십시오:

Field privateStringField = 
   MyClass.class.getDeclaredField("privateString");
privateStringField.setAccessible(true);

String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);

다른 팁

아니요, 당신은 그것을 사용해야합니다 protected.

이와 같은 질문의 경우 웹 사이트에있는 테이블은 다음과 같습니다. http://java.sun.com/docs/books/tutorial/java/javaoo/accesscontrol.html

기본적으로 귀하는 FOO에서 공개 또는 보호 변수가 선언되기를 원합니다. 이는 하위 클래스가 부모로부터 상속되어 BAZ에서 볼 수있는 변수이기 때문입니다.

어린이 수업은 개인 회원에 액세스 할 수 없습니다 (개인 액세스 제어의 요점).

... FOO에 정의 된 액세서 방법이없는 경우?

액세서가 필요합니다. 게다가, 상속을 처리합니다. 그 var가 실제로 부모에게 있어야합니까? IS를 기억하십시오. 수표 ..

후손 클래스에서는 개인 변수에 액세스 할 수 없습니다. 일반적으로 "보호 된"또는 "패키지"(기본) 레벨 액세스를 사용하려고합니다. 그러나 당신이 정말로 까다 롭고 싶다면, 당신은 반사를 사용하고 AccessibleObject 그것을 얻기 위해. 나는 당신이 실제로 구속력이 없다면 생산 코드를 위해 그렇게하지 않는 것이 좋습니다. 테스트 등은 괜찮습니다.

하위 클래스에서 슈퍼 클래스의 개인 변수를 사용하려면 액세서 방법이 필요합니다. 그렇지 않으면 개인 대신 보호 된 수정자를 사용합니다.

클래스의 개인 변수는 항상 해당 클래스 내에 범위가 있습니다. 서브 클래스 사이에 공유 해야하는 경우 "보호"로 선언해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top