Formal model for defender method resolution

Neal Gafter neal at
Fri Jan 28 12:30:42 PST 2011

On Fri, Jan 28, 2011 at 11:38 AM, Brian Goetz <brian.goetz at>wrote:

> Some people find this "sub-inheritance" (inheritance of part of a
> signature) disturbing, because there is no precedent for it in Java.
> What do people think?  Do you find this interpretation of B (m()
> continues to use A's default) confusing or natural (or both)?

I find it confusing that you consider the default to be part of the

Your proposal here (B.m inherits A's default) feels ok to me, but I could
see it going the other way.  Here's why.

In the more general case with covariant overriding

interface A {
    A f() { ... }
interface B extends A {
    B f();

I don't think there needs to be any error on B.  At compile-time, any class
that implements B will have to provide an implementation for B.f() [it is
after all abstract], so the error on B serves little purpose.  At runtime,
A.f and B.f have distinct VM signatures and are therefore unrelated
methods.  (Is it intentional that your formalism doesn't reflect that?)
Handling the non-covariant case the same as the covariant case (the method
becomes abstract) would therefore be a natural solution.

More information about the lambda-dev mailing list