由此代碼產生的輸出沒有意義,可能是由於我缺乏理解。糾正我,如果我錯了Arraylist輸出不如預期
import java.util.*;
class DemoA
{
public DemoA(){
System.out.println("DemoA object created");
}
public String methodA() {
return "methodA in DemoA";
}
}
class DemoB extends DemoA
{
public DemoB(){
super();
System.out.println("DemoB object created");
}
public String methodA() {
return "methodA in subclass (DemoB)";
}
}
public class ExamQ1b
{
public static void main(String[] args) {
ArrayList<DemoA> aList = new ArrayList<DemoA>();
aList.add(new DemoA());
aList.add(new DemoB());
for (DemoA obj: aList)
System.out.println(obj.methodA());
}
}
輸出是
DemoA object created
DemoA object created
DemoB object created
methodA in DemoA
methodA in subclass (DemoB)
起初我不明白輸出是怎麼來的,但後來我用的調試功能,並發現它爲什麼這樣的行爲一種方式,並發現了一些相當混亂(並不令人驚訝)。
爲什麼這些代碼行產生輸出?
aList.add(new DemoA());
aList.add(new DemoB());
輸出從上面的線是這些,但在我想這些應該只是添加到列表中不會產生任何輸出,我缺少什麼嗎?
DemoA object created
DemoA object created
DemoB object created
因爲在創建子對象時始終調用父級默認構造函數。 –
好的,但仍然沒有意義,爲什麼有需要打印出來?只是添加到列表 – noobprogrammer