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 seeinvokeinterfaceas part of a vtable parsing, which implements dynamic method dispatch. See blogs.oracle.com/javamagazine/post/…