Syntax for calling super

Peter Levart peter.levart at marand.si
Tue Aug 28 00:12:53 PDT 2012


On Monday, August 27, 2012 10:17:45 AM Gregg Wonderly wrote:
> On Aug 27, 2012, at 8:27 AM, Peter Levart <peter.levart at marand.si> wrote:
> > On Monday, August 27, 2012 12:41:22 PM Peter Levart wrote:
> >>> K.super.m() already has an existing meaning with inner classes, just as
> >>> K.this.m() does. There's a difference between searching for a type alone
> >>> and searching for an object and then a type. Using the same notation is
> >>> confusing in my view.
> >> 
> >> Oh, I wasn't aware of that. That changes things. In particular if there
> >> was
> >> a  situation where it could resolve to both (the super method of an outer
> >> instance and the particular super interface's default method). There
> >> would
> >> have to be a precendence rule or an unresolvable conflict which
> >> complicates
> >> things further.
> > 
> > And here it is (an example):
> > 
> > public interface J {
> > 
> >    void m() default {
> >    
> >       System.out.println("J: " + this);
> >    
> >    }
> > 
> > }
> > 
> > public interface K {
> > 
> >    void m() default {
> >    
> >       System.out.println("K: " + this);
> >    
> >    }
> > 
> > }
> > 
> > public class C implements J, K {
> > 
> >    @Override
> >    public void m() {
> >    
> >        new K() {
> >        
> >            @Override
> >            public void m() {
> >            
> >                K.super.m();
> >            
> >            }
> >        
> >        }.m();
> >        
> >        K.super.m();
> >    
> >    }
> >    
> >    public static void main(String[] args) {
> >    
> >        new C().m();
> >    
> >    }
> > 
> > }
> > 
> > 
> > ... this example prints two different lines in the form:
> > 
> > K: C$1 at 65f9c5c8
> > K: C at 712801c5
> > 
> > Because K.super.m() is the same syntax used for two different things, I
> > cannot call the same super method in inner class as I can directly in the
> > body of C::k()…
> 
> I think I am lost in what is trying to be "proven" in these discussions. 
> Peter, are you trying to say that K.super.m() will change what is resolved
> when used with default methods, or are you saying that there is a
> particular namespace that you can not reach?  Or, is thee something else
> here that I can't see because of my focus?

I was trying to say that there is no way to call the super interface method of 
an outer instance when the same member or interface_name/member also exists in 
the inner class's superinterface, because there is no way to explicitly 
specify the outer instance. More about that has been clarified in later posts.

Regards, Peter


> 
> Gregg


More information about the lambda-dev mailing list