This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
I think in this particular ? there is no need of binding coz the method is invoked using the same reference. You are passing reference var to the methods and it chosses the method that is most specific to the argument type passed. So that explains the nature of o/p. Am i right??
Joined: Jun 13, 2002
Ya, It looks like a dynamic binding but isnt. It is a case of pure method invocation and i think it is resolved at compile time itself. Similar example
Whats will the result be?
Joined: Mar 20, 2002
String version will be printed as that is more specific down the inheritence. But if u replaced the Object bit by an object of StringBuffer it will give error. Coz though even StringBuffer can have null value but it does not belong to the hierarchy so becomes ambigious.
seshu, in your first code snippet, I don't see the definition of method in neither the Parent class nor the Child class. therefore, the method from the Test class is invoked depending on the argument type. The general rule for dynamic method lookup is that the method invoked, depends on the class of the reference, and not its compile-time type. Had you had a definition of method in both your Parent and Child classes, then dynamic binding will go to work and will call the methods from appropriate classes.
According to the JLS: When a method is invoked (�15.12), the number of actual arguments and the compile-time types of the arguments are used, at compile time, to determine the signature of the method that will be invoked (�15.12.2). So for overloaded methods, you use the object reference type, not the type of the object at runtime, in this particular case.