このコードから生成された出力は、おそらく私の理解不足のために意味がありません。私が間違っている場合は私を訂正してください
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