【发布时间】:2016-07-30 00:47:21
【问题描述】:
假设我有一个使用多个 ArrayList 的类:
public static ArrayList<String> openable = new ArrayList<>();
public static ArrayList<String> commands = new ArrayList<>();
public static ArrayList<String> mail = new ArrayList<>();
public static ArrayList<String> mailCommands = new ArrayList<>();
public static ArrayList<String> previousCommands = new ArrayList<>();
我还有多个其他类,其中包含使用这些 ArrayList 的方法。假设我还有一个名为 connect 的类,它扩展了包含这些变量的第一个类:
public class Connect extends Main_Menu{
如果我要调用我通常在 Main_Menu 类中调用的方法,从 Connect 类中使用具有相同名称的私有新变量:
private static ArrayList<String> previousCommands = new ArrayList<String>();
private static ArrayList<String> openable = new ArrayList<>();
private static ArrayList<String> commands = new ArrayList<>();
private static ArrayList<String> mail = new ArrayList<>();
private static ArrayList<String> mailCommands = new ArrayList<>();
使用这些 ArrayList 的方法是使用来自 Main_Menu 类中的公共变量的数据还是使用来自 Connect 类中的变量的私有数据?
【问题讨论】:
-
private字段不会变为public。 -
@ElliottFrisch 我从没说过他们做到了?我问是否有两个同名的变量,一个是公共的,一个不是,它是从使用其中一个变量的方法调用的,它使用哪个?
-
它们是两个不同类的变量;当然他们是不同的。运行一个基本的测试用例会立即显示这一点,而不必怀疑。无关,但请遵守 Java 命名约定,例如,
MainMenu。 -
不是 100% 清楚你在问什么,但它似乎基本上是关于 name masking。
-
我只是有一些建议。您可以忽略它们,但我希望您尝试至少考虑一下。首先永远不要公开非最终变量——绝对规则,在语言中不应该被允许,即使这些是最终的,最好不要公开可变对象。这已被广泛接受,即使您知道自己在做什么并故意违反这些规则之一,您也必须向几乎任何看到它的人保护您的代码。第二——如果你避免了静态,你会发现自己更快乐。创建一个具有非静态成员的实例,而不是一个充满静态的类。