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
Sub
Sub
B.
Contract
Contract
Super
Contract
Super
C. Compilation fails at line n1
D. Compilation fails at line n2
題解
這題的ArrayList物件並沒有使用到泛型,因此ArrayList物件可以存入任意的Object物件。
物件的getClass方法會回傳物件實體所屬的類別。