java - 通过引用传递树桩新手

标签 java extends

根据javadocs“子类继承所有成员(字段、方法和嵌套类)from its superclass”。另外,Java manipulates objects by 那么为什么这个子类会为 aList[0] 返回错误的值呢?当我希望每个类都修改同一个数组时,似乎每个类都在修改自己的数组。

public class mystery {
protected List<String> aList;

public mystery() {
    aList = new ArrayList<String>();
}

public void addToArray() {
    //"foo" is successfully added to the arraylist
    aList.add("foo");
}

public void printArray() {
    System.out.println( "printArray " + aList.get(0) +"" );
}
public static void main(String[] args) {
    mystery prob1 = new mystery();
    mysterySubclass prob2 = new mysterySubclass();
    //add "foo" to array
    prob1.addToArray();
    //add "bar" to array
    prob2.addToArray2();

    //expect to print "foo", works as expected
    prob1.printArray();
    //expect to print "foo", but actually prints "bar"
    prob2.printArray();
    //expect to print "foo", but actually prints "bar"
    prob2.printArray2();
}   

}

public class mysterySubclass extends mystery {

public void mysterySubclass() {}
public void addToArray2() {
    aList.add("bar");
}

public void printArray2() {
    System.out.println( "printArray2 " + super.aList.get(0) +"" );
}

}

最佳答案

    mystery prob1 = new mystery();
    mysterySubclass prob2 = new mysterySubclass();

在这里,您将创建两个新对象,因此它们将拥有自己的列表,并且不会像您期望的那样共享一个列表。

您正在寻找的是:

    mystery prob1 = new mysterySubclass();
    mysterySubclass prob2 = (mysterySubclass)prob1;

试试这个..

关于java - 通过引用传递树桩新手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13639171/

相关文章:

java - 我想检查用户插入的文件名是否与目录中的文件名匹配

java - 我可以创建一个已经是另一个类的扩展的类的扩展吗?

java - 在多线程中,为什么当我暂停一个线程执行时其他线程不工作

Java:如果这是instanceof Something,则显示仅属于Something的变量?

java - JBoss 6 无法在装有 JDK 7 的 Windows(32 位)机器上启动

java - GAE/J 注销但未销毁 session

java - 我想将结果集转换为字符串。我什么都试过了,但总是找不到数据。请提供一些解决方案

java - 如何在扩展 JButton 类时扩展 actionPerformed 方法

Django - 一个模板可以扩展两个或多个模板吗?

java - H2 嵌入式数据库在 spring boot 测试期间未获取属性