보호 된 enum 변수가 포함 된 MyAction이라는 추상 클래스가 있습니다. 다음과 같이 정의 된 클래스 : 추상 기본 클래스를 확장하는 클래스의 인스턴스의 보호 된 변수에 액세스 하시겠습니까?
package mypackage;
public abstract class MyAction {
public enum ActionId {
ACTION1, ACTION2;
}
protected ActionId actionId;
// constructor
public MyAction(ActionId actionId) {
this.actionId = actionId;
}
public ActionId getActionId() {
return actionId;
}
...
...
}
는 I가 특정 액션을 생성 MyAction1, 즉 연장 시켜라 : I는 (동일한 패키지) 싱글 유틸리티 클래스가
package mypackage;
public class MyAction1 extends MyAction {
public MyAction1() {
super(ActionId.ACTION1);
}
...
...
}
의 인스턴스를 생성 MyAction1와는 HashMap에 저장합니다 :
package mypackage;
public class MyActionFactory {
private static MyActionFactory theInstance;
private HashMap<ActionId, MyAction> actions;
private MyActionFactory() {
actions = new HashMap<ActionId, MyAction>();
MyAction1 myAction1 = new MyAction1();
actions.put(myAction1.actionId, myAction1); // able to access protected variable actionId
}
public static VsActionFactory getInstance() {
if (theInstance == null)
theInstance = new VsActionFactory();
return theInstance;
}
...
...
}
참고 방법 actions.put에 (는을 myAction1.actionId 나의 Action1) 보호 된 회원 조치 ID에 접속할 수 있습니다.
왜 내가 이 MyAction1의 인스턴스 (기본 클래스 시켜라에 포함)을의 actionId 보호 된 멤버에 액세스 할 수 있다는 것입니다? 보호 된 멤버는 하위 클래스에만 액세스 할 수 있다고 생각했습니다.
MyActionFactory은 (는) 다른 패키지와 동일한 패키지에 있습니까?
보호 된 멤버는 동일한 패키지의 모든 클래스에서 액세스 할 수 있습니다. http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html –
오. 하위 클래스에만 있다고 생각했습니다. 그것은 쉬운 대답이었다. :) –