gpt4 book ai didi

java - 访问扩展抽象基类的类实例的 protected 变量?

转载 作者:行者123 更新时间:2023-12-01 14:10:28 25 4
gpt4 key购买 nike

我有一个名为 MyAction 的抽象类,其中包含一个 protected 枚举变量。该类定义如下:

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

我创建了一个扩展 MyAction 的特定操作 MyAction1:

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, myAction1)中,我能够访问 protected 成员actionId

为什么我可以访问MyAction1实例的 protected 成员actionId(包含在基类MyAction中)?我认为 protected 成员只能由子类访问。

这与MyActionFactory与其他包位于同一个包中有什么关系吗?

最佳答案

protected 关键字使同一包中的内容可见。情况确实如此,因为您的两个类都位于 package mypackage 中。

这是一个不错的表格,取自 Oracle.com :

enter image description here

关于java - 访问扩展抽象基类的类实例的 protected 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18560341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com