在创建新对象时扩展类问题

时间:2013-07-23 09:09:11

标签: java inheritance

我的代码有问题,但我不知道为什么。我有两节课:

public class MyClass extends MySuperClass {
    potected int field1;
    public MyClass() {
        super();
    }
    @Override
    public int getField1() {
        return this.field1;
    }
    public void setField1(int f) {
        this.field1 = f;
    }
}


public class MySuperClass {
    potected int field1, field2;
    public MySuperObject() {
    }

    public int getField1() {
        return this.field1;
    }
    public void setField1(int f) {
        this.field1 = f;
    }

    public void setField2(int f) {
        this.field2 = f;
    }

    public int getField2() {
       return this.field2;
    }
}

当我创建不同的新MyClass对象(即插入到ArrayList中)时出现问题:

ArrayList<MyClass> list = new ArrayList<MyClass>();
while(condidion) {
    MyClass obj = new MyClass();
    obj.setField1(value1);
    obj.setField2(value2);
    list.add(obj);
}

如果value1和value2假设后续值

  

1和50

     

2和70

     

3和80

我的代码执行后,我的列表包含

  

1和80

     

2和80

     

3和80

看起来每次我创建新的MyClass对象时,只创建一个MySuperClass实例(field2假设最后一个输入值的值)。 我该如何解决?

1 个答案:

答案 0 :(得分:0)

这是您提供的代码。如果您提供正确的输入,它将完美运行。

import java.util.ArrayList;

class MyClass extends MySuperClass {

protected int field1;

public MyClass() {
    super();
}

@Override
public int getField1() {
    return this.field1;
}

public void setField1(int f) {
    this.field1 = f;
}

}     class MySuperClass {

protected int field1, field2;

public MySuperClass() {
}

public int getField1() {
    return this.field1;
}

public void setField1(int f) {
    this.field1 = f;
}

public void setField2(int f) {
    this.field2 = f;
}

public int getField2() {
    return this.field2;
}

}

public class Tryouts {

public static void main(String[] args) {

    int i = 0;

    ArrayList<MyClass> list = new ArrayList<MyClass>();
    while(i < 3) {
        MyClass obj = new MyClass();
        obj.setField1(40 + i);
        obj.setField2(80+ i);
        list.add(obj);
        i++;
    }

    for (MyClass c : list) {
        System.out.println(c.getField1() + "::" + c.getField2());
    }
}

}

The output is 
40::80,   41::81,   42::82