I had an interview days ago and was thrown a question like this.
Q: Reverse a linked list. Following code is given:
public class ReverseList {
interface NodeList {
int getItem();
NodeList nextNode();
}
void reverse(NodeList node) {
}
public static void main(String[] args) {
}
}
I was confused because I did not know an interface object could be used as a method parameter. The interviewer explained a little bit but I am still not sure about this. Could somebody enlighten me?
reverse()
accepts a formal parameter (from the caller's formal argument) of an interface typeNodeList
, thenreverse()
accepts an object reference, not an interface. You can confirm this by looking at the bytecode, where you would seeinvokeinterface
as part of a vtable parsing, which implements dynamic method dispatch. See blogs.oracle.com/javamagazine/post/… – Glenda