But on the other hand it is not logical for me.
Why can't we use Integer for iterating? The only objects that can be added must be of type or subtype of Integer so upcasting to Integer would be always a success, co what's wrong?
Well at run time the object formed can be of the type Object/Number/Integer(anyone) which the compiler doesn't know. So say if it is Object then whatever comes from that list will always be an object. So If you try to iterate this list using Integer or Number then if it were to compile, then the process would choke. So best solution to not compile only. But why it allows Object because there is nothing that can be super of Object. So what ever comes out can always be casted to Object.
But I need a place where i can get more detail of such term of Generic..
It would really help me to understand the concept...
What is that you don't understand? I think if you understand option d then option e should be pretty much clear. option f is not even correct as ? is used