javadocs によると、「サブクラスはそのスーパークラスからすべてのメンバー (フィールド、メソッド、およびネストされたクラス) を継承します」。また、Java は参照によってオブジェクトを操作します。では、なぜこのサブクラスは 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) +"" );
}
}