Given the code fragment:



interface Contract {
}

class Super implements Contract {
}

class Sub extends Super {
}

public class Ref {

    public static void main(String[] args) {
        List objs = new ArrayList();
        Contract c1 = new Super();
        Contract c2 = new Sub(); // line n1
        Super s1 = new Sub();

        objs.add(c1);
        objs.add(c2);
        objs.add(s1); // line n2

        for (Object itm : objs) {
            System.out.println(itm.getClass().getName());
        }
    }
}

What is the result?

A.

Super
Sub
Sub

B.

Contract
Contract
Super

C. Compilation fails at line n1
D. Compilation fails at line n2

題解

這題的ArrayList物件並沒有使用到泛型,因此ArrayList物件可以存入任意的Object物件。

物件的getClass方法會回傳物件實體所屬的類別。