studentList = personList; |
Answer: incorrect.
This one is obvious to anyone. Surely a list of Persons cannot be assigned to a variable containing a list of Students because the list can contain Person objects which are notStudents.
This one is obvious to anyone. Surely a list of Persons cannot be assigned to a variable containing a list of Students because the list can contain Person objects which are notStudents.
personList = studentList; |
Answer: incorrect.
This assignment is not correct because List<Student> is not a subclass of List<Person>. This is surprising to many Java beginners. Here's an explanation. Imagine for a moment that the assignment was correct. Then the variable personList would hold a reference to thestudentList object (a list of Students). But the variable personList only knows that it is a list of Persons. One can try to insert a Professor into the list.
This assignment is not correct because List<Student> is not a subclass of List<Person>. This is surprising to many Java beginners. Here's an explanation. Imagine for a moment that the assignment was correct. Then the variable personList would hold a reference to thestudentList object (a list of Students). But the variable personList only knows that it is a list of Persons. One can try to insert a Professor into the list.
1
| personList.add(new Professor("A","B")); //incorrect but compiles |
The compiler does not know that the insert operation is incorrect. The runtime system has no way of knowing that the insert is incorrect.
personArray = studentArray; |
Answer: correct.
Here we have another surprise. Arrays in Java are covariant, which, in our example, means that if Student is a subclass of Person (which it is), then Student[] is a subclass ofPerson[].
Java arrays know the type of its elements and they check at runtime whether an element can be inserted into it.Here we have another surprise. Arrays in Java are covariant, which, in our example, means that if Student is a subclass of Person (which it is), then Student[] is a subclass ofPerson[].
it's not possible that an exception is thrown in a similar situation with parametrized lists. The generic lists do not know the type of its elements at runtime. They cannot checkwhether an element can be inserted into the list. As a consequence, List<Person> is not a subclass of List<Student>.
Read full article from Java Generics: The Difference between Java Arrays and Generic Lists | OneWebSQL
No comments:
Post a Comment