
Originariamente inviata da
francesco.muia
Te lo spiegato nella prima risposta e come ti ho detto se non hai ancora studiato L'ereditarietà non lo potrai mai capire fino in fondo. Il concetto di fondo è che come hai ben notato che il tipo dichiarato in una classe può essere diverso a runtime.
poi non è proprio vero che non è un collection, ma in pratica è una classe ,per quanto riguarda hashmap è un innerClass "Values", che estende AbstractCollection che a sua volta implementa collection. In AbstractCollection sono definiti i metodi come isEmpty, e altri nel tuo caso vengono definiti nella inner class Values