Choice:
A. cat
B. tiger
C. ClassCastException at run time
D. compiler error at line 7
E. compiler error at line 8
F. compiler error at line 9
G. compiler error at other lines
Explain: Line 6 declared an ArrayList with type Cat. Since Tiger is a subclass of Cat, when both Cat and Tiger objects are added to the list, they are allowed. Line 11's expected method parameter is List<Tiger>, even though Tiger extends Cat, List<Tiger> does not extends List<Cat>. The compiler error is: Cats.java:9: error: incompatible types: List<Cat> cannot be converted to List<Tiger>. If line 9 is changed to private static void catDisplay(List<Cat> cats) {, the answer will be A, B. At line 13, the toString() of Tiger and Cat is called to display the object. Due to Polymorphism, which has been discussed in OCAJP, the Tiger's toString() is called even though the Tiger object is cast to Cat, so we have both "cat" and "tiger" string print out.