方法Java

时间:2016-07-30 00:47:22

标签: java arraylist methods

假设我有一个使用多个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类中变量的私有数据?

2 个答案:

答案 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<>();
    }