In the following code, the method returns a Stack object
which gets casted to an Iterable
.
public Iterable<Integer> getRoute(int x) {
Stack<Integer> stack = new Stack<Integer>();
...
stack.push(x);
return stack;
}
Iterable is an interface and not a class. Could you please let me know, how does casting work here for this case?
There's no actual casting here - just an implicit conversion from Stack<Integer>
to Iterable<Integer>
because Stack<E>
implements Iterable<E>
(implicitly, by extending Vector<E>
, which extends AbstractList<E>
, which extends AbstractCollection<E>
, which implements Collection<E>
, which extends Iterable<E>
).
If it didn't implement the interface, the implicit conversion would be forbidden at compile-time, and an explicit cast would fail at execution time. Java doesn't use duck-typing.
See more on this question at Stackoverflow