Der Zugriff Auf Protected Variablen Einer Instanz Einer Klasse, Die Erweitert Die Abstrakte Klasse?

Ich habe eine abstrakte Klasse namens MyAction, die einen geschützten enum-variable. Die Klasse ist wie folgt definiert:

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;
    }    
    ...
    ...
}

Erstellte ich eine bestimmte Aktion, MyAction1, dass extends MyAction:

package mypackage;

public class MyAction1 extends MyAction {
    public MyAction1() {
        super(ActionId.ACTION1);
    }
    ...
    ...
}    

Ich habe eine singleton-utility-Klasse (im gleichen Paket), die erstellt eine Instanz von MyAction1 und speichert Sie in eine 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;
    }    
    ...
    ...
}

Beachten Sie, dass in der Methode Aktionen.put(myAction1.actionId, myAction1) ich bin in der Lage, den Zugriff auf die geschützten member actionId.

Warum ist es, dass ich Zugriff auf die protected-member actionId (enthalten in der base-Klasse MyAction) der Instanz von MyAction1? Ich dachte, protected-member wurden nur Unterklassen.

Muss es etwas zu tun mit MyActionFactory in der gleichen Paket wie die anderen?

InformationsquelleAutor Jan Tacci | 2013-09-01
Schreibe einen Kommentar