假设我有一个使用多个ArrayLists的类:
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<>();
我有多个其他类包含使用这些ArrayLists的方法。假设我还有一个名为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<>();
使用这些ArrayLists的方法是否会使用Main_Menu
类中公共变量的数据,还是会使用Connect
类中变量的私有数据?
答案 0 :(得分:1)
亲自看看:
static class Parent
{
public static int A = 5;
public static int B = 18;
public static int getA(){
return A;
}
public static int getB(){
return B;
}
}
static class Child extends Parent
{
private static int A = 10;
public static int getA(){
return A;
}
}
public static void main(String[] args) {
Parent p = new Parent();
Child c = new Child();
System.out.println("Parent A: " + p.getA());
System.out.println("Parent B: " + p.getB());
System.out.println("Child A: " + c.getA());
}
输出:
run:
Parent A: 5
Parent B: 18
Child A: 10
BUILD SUCCESSFUL (total time: 0 seconds)
答案 1 :(得分:-1)
我认为Connect类中的静态字段仅仅覆盖了Main_Menu类中相同字段的可见性。在Connect类的范围之外,该字段不可见,因此您无法访问它。如果你甚至可以编译,你会得到一个例外。
编辑:我假设您正在直接访问这些静态变量,而不是按照其他用户的建议通过重写方法访问私有字段。
Main.java:
public class Main {
public static ArrayList<String> things = new ArrayList<>();
public static void main(String[] args){
Playground.things; // <- Cannot access private static field outside of that class
}
}
Playground.java:
public class Playground extends Main {
private static ArrayList<String> things = new ArrayList<>();
}