"Eppur si muove!"
"....bigmouth strikes again, and I've got no right to take my place with the human race...."<p>SCJP 1.4
SCJP 1.4<br />SCWCD 1.4
"Eppur si muove!"
Hard work beats talent<br />when talent doesn't work hard.<p> - Tim Notke
Originally posted by Harvinder Singh:
Hi Gian,
/* Will u plz tell me why first method is not more specific?
In first,compiler have to convert only second arg to long.
In second,both short values have to be promoted to int.
*/
class InvocationFunda{
static void xyz(short s1 , long l){}
static void xyz(int i , int i1){}
public static void main(String args[]){
short s1=10,s2=10;
xyz(s1,s2);
}
}
Meng Yi
Choose the Most Specific Method
If more than one method declaration is both accessible and applicable to a method invocation, it is necessary to choose one to provide the descriptor for the run-time method dispatch. The Java programming language uses the rule that the most specific method is chosen.
The informal intuition is that one method declaration is more specific than another if any invocation handled by the first method could be passed on to the other one without a compile-time type error.
The precise definition is as follows. Let m be a name and suppose that there are two declarations of methods named m, each having n parameters. Suppose that one declaration appears within a class or interface T and that the types of the parameters are T1, . . . , Tn; suppose moreover that the other declaration appears within a class or interface U and that the types of the parameters are U1, . . . , Un. Then the method m declared in T is more specific than the method m declared in U if and only if both of the following are true:
* T can be converted to U by method invocation conversion.
* Tj can be converted to Uj by method invocation conversion, for all j from 1 to n.
A method is said to be maximally specific for a method invocation if it is applicable and accessible and there is no other applicable and accessible method that is more specific.
If there is exactly one maximally specific method, then it is in fact the most specific method; it is necessarily more specific than any other method that is applicable and accessible. It is then subjected to some further compile-time checks as described in �15.12.3.
It is possible that no method is the most specific, because there are two or more maximally specific methods. In this case:
* If all the maximally specific methods have the same signature, then:
o If one of the maximally specific methods is not declared abstract, it is the most specific method.
o Otherwise, all the maximally specific methods are necessarily declared abstract. The most specific method is chosen arbitrarily among the maximally specific methods. However, the most specific method is considered to throw a checked exception if and only if that exception is declared in the throws clauses of each of the maximally specific methods.
* Otherwise, we say that the method invocation is ambiguous, and a compile-time error occurs.
<img src="cool.gif" border="0"> <img src="graemlins/beerchug.gif" border="0" alt="[beerchug]" /> <br />SCJP 1.4
"Eppur si muove!"
Originally posted by sanjana narayanan:
Hi Jim,
I don't understand this part of your explanation.
"However, the most specific method is considered to throw a checked exception if and only if that exception is declared in the throws clauses of each of the maximally specific methods. "
Can u explain this?
-Sanjana
<img src="cool.gif" border="0"> <img src="graemlins/beerchug.gif" border="0" alt="[beerchug]" /> <br />SCJP 1.4
Police line, do not cross. Well, this tiny ad can go through:
a bit of art, as a gift, that will fit in a stocking
https://gardener-gift.com
|