我有一個名爲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;
}
...
...
}
我創建了一個特定的動作,MyAction1,延伸MyAction:
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)我可以訪問受保護的成員actionId。
爲什麼我可以訪問受保護的成員actionId(包含在基類MyAction)的MyAction1的實例?我認爲受保護的成員只能通過子類訪問。
與MyActionFactory有什麼關係?
受保護的成員可以在同一包中的所有類中訪問。 http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html –
哦。我認爲這只是子類。這是一個簡單的答案。 :) –