The type of a variable and the type of the object the variable refers to do not need to be the same, so long as the type of the object is compatible with the type of the variable. So what does it mean to be compatible?
It means that the object’s type has an “is a” relationship with the variable’s type. ArrayList<String>
“is a” List<String>
, because ArrayList
implements the List
interface. That is, ArrayList
has all of the methods that List
defines, and declares (by saying implements List
) that it conforms to the definition of those methods.
This is a fundamental concept in object-oriented programming called polymorphism. That is, we can say that there is a thing called a List
, and we can write code that works with List
s, without that code knowing that the actual List
s it’s working with are ArrayList
s or LinkedList
s or any other concrete type.
In this case, it’s with an interface, but the same concept applies in object type hierarchies as well. If you have class Animal
, you might have a more specific subclass (Dog
). Anything that works with the Animal
type can work with Dog
s, because Dog
is an Animal
.
0
solved Why this declaration is correct in Java