Re: Anyone understand method invocation in Java?
Joshua Cranmer <Pidgeot18@verizon.invalid> wrote:
Andreas Leitgeb wrote:
Scott <blackhole@nowhere.com> wrote:
"15.12.2.5 Choosing the Most Specific Method
If exactly one of the maximally specific methods is not declared abstract, it
is the most specific method.
Why are abstract methods "discriminated"?
I think the intent here is to prefer the more specific methods over the
automatically-generated bridge methods in the process.
Now I'm even more confused. The only candidates for "automatically-
generated bridge methods" that come to my mind are those discussed
recently, which were marked as "volatile"...ahem... ACC_BRIDGE, but
these are by no means "abstract".
Note that trying to get this section to come into play is difficult
since Java does a lot to keep you from having two override-equivalent
method signatures.
My understanding was:
interface I1 {}
interface I2 {}
interface I3 {}
class C implements I1,I2,I3 {}
abstract class MyClass {
abstract int foo(I1 i);
abstract int foo(I2 i);
int foo(I3 i) { i=null; } // just dummy code
static void bar(C c) { foo(c); }
}
According to the spec, bar(C) would always call foo(I3), not
even considering foo(I1..2) beyond that paragraph.
In practise it's different:
T.java:11: reference to foo is ambiguous, both method foo(I2) in MyClass
and method foo(I3) in MyClass match
static void bar(C c) { foo(c); }
No automatic picking after all? Still even considering I2 ?
Where did I misunderstand the spec?