Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #30350 > unrolled thread

Accessing super method from inner class?

Started byKnute Johnson <eternal@knutejohnson.com>
First post2014-11-12 17:40 -0800
Last post2014-11-13 10:01 -0800
Articles 3 — 2 participants

Back to article view | Back to comp.lang.java.programmer


Contents

  Accessing super method from inner class? Knute Johnson <eternal@knutejohnson.com> - 2014-11-12 17:40 -0800
    Re: Accessing super method from inner class? Jeff Higgins <jeff@invalid.invalid> - 2014-11-12 21:54 -0500
      Re: Accessing super method from inner class? Knute Johnson <eternal@knutejohnson.com> - 2014-11-13 10:01 -0800

#30350 — Accessing super method from inner class?

FromKnute Johnson <eternal@knutejohnson.com>
Date2014-11-12 17:40 -0800
SubjectAccessing super method from inner class?
Message-ID<m4126g$bkp$1@dont-email.me>
I've got some code where I am wrapping all the calls to 
JTextArea.append() in EventQueue.invokeLater().  So I thought I would 
just extend JTextArea but what I thought was obvious isn't.

import java.awt.*;
import javax.swing.*;

public class KTextArea extends JTextArea {
     public KTextArea(String text) {
         super(text);
     }

     public void append(final String str) {
         EventQueue.invokeLater(new Runnable() {
             public void run() {
                 KTextArea.this.super.append(str);
             }
         });
     }
}


com\knutejohnson\cookbook\KTextArea.java:14: error: '(' expected
                 KTextArea.this.super.append(str);
                                     ^
1 error

but KTextArea.super.append(str); appears to work.  Why doesn't it 
require the 'this'?

-- 

Knute Johnson

[toc] | [next] | [standalone]


#30351

FromJeff Higgins <jeff@invalid.invalid>
Date2014-11-12 21:54 -0500
Message-ID<m416lq$c72$1@dont-email.me>
In reply to#30350
On 11/12/2014 08:40 PM, Knute Johnson wrote:
> I've got some code where I am wrapping all the calls to
> JTextArea.append() in EventQueue.invokeLater().  So I thought I would
> just extend JTextArea but what I thought was obvious isn't.
>
> import java.awt.*;
> import javax.swing.*;
>
> public class KTextArea extends JTextArea {
>      public KTextArea(String text) {
>          super(text);
>      }
>
>      public void append(final String str) {
>          EventQueue.invokeLater(new Runnable() {
>              public void run() {
>                  KTextArea.this.super.append(str);

In this context, this means your new Runnable, super means Object,
and KTextArea.super means JTextArea, and KTextArea.this is undefined.

I think.

>              }
>          });
>      }
> }
>
>
> com\knutejohnson\cookbook\KTextArea.java:14: error: '(' expected
>                  KTextArea.this.super.append(str);
>                                      ^
> 1 error
>
> but KTextArea.super.append(str); appears to work.  Why doesn't it
> require the 'this'?
>

[toc] | [prev] | [next] | [standalone]


#30352

FromKnute Johnson <eternal@knutejohnson.com>
Date2014-11-13 10:01 -0800
Message-ID<m42rm0$tr0$1@dont-email.me>
In reply to#30351
On 11/12/2014 18:54, Jeff Higgins wrote:
> On 11/12/2014 08:40 PM, Knute Johnson wrote:
>> I've got some code where I am wrapping all the calls to
>> JTextArea.append() in EventQueue.invokeLater().  So I thought I would
>> just extend JTextArea but what I thought was obvious isn't.
>>
>> import java.awt.*;
>> import javax.swing.*;
>>
>> public class KTextArea extends JTextArea {
>>      public KTextArea(String text) {
>>          super(text);
>>      }
>>
>>      public void append(final String str) {
>>          EventQueue.invokeLater(new Runnable() {
>>              public void run() {
>>                  KTextArea.this.super.append(str);
>
> In this context, this means your new Runnable, super means Object,
> and KTextArea.super means JTextArea, and KTextArea.this is undefined.
>
> I think.
>

I think I've answered my own question, from the JLS;

"15.12
Method Invocation Expressions
EXPRESSIONS
500

Suppose that a field access expression T.super.f appears within class C, 
and the immediate superclass of the class denoted by T is a class whose 
fully qualified name is S. If f in S is accessible from C , then 
T.super.f is treated as if it had been the expression this.f in the body 
of class S. Otherwise, a compile-time error occurs."

I'm not sure if that is what you are saying but I think so.  I thought 
that the 'this' was needed to reach the instance but it appears as 
though Class.super.field implies SuperClass.this.field.  I'm curious how 
this is going to work with static fields :-).

Thanks for taking the time to answer.

-- 

Knute Johnson

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.java.programmer


csiph-web