[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Japi vs JEditorPaneAccessibleHypertextSupport
From: |
Tom Tromey |
Subject: |
Re: Japi vs JEditorPaneAccessibleHypertextSupport |
Date: |
08 Nov 2005 19:50:40 -0700 |
User-agent: |
Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 |
>>>>> "Stuart" == Stuart Ballard <address@hidden> writes:
>> The rule is, a default constructor inherits the access of its class.
>> I.E., 'protected' is correct here.
Stuart> Doesn't that mean that a class that inherits from JEditorPane can see
Stuart> the class but not the constructor? And isn't that a little weird? (Not
Stuart> disputing your JLS expertise, mind you :) )
Oh, no... access control quiz!
I think you are right, the access is disallowed. It is a bit weird
but the default constructor access rule is pretty definitive:
http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#16823
The inherited member class can still be used in this case by making a
subclass of it.
>> Perhaps you can do it by noticing if the class has a synthetic
>> 'this$0' field. This is the usual name for an 'outer this'
>> reference, meaning that the class is not static.
Stuart> Does every nonstatic inner class get its outer this prepended to every
Stuart> constructor? (It's easy enough to detect that the class isn't static,
Stuart> we already flag a japi error if the staticness is wrong)
Stuart> What about a doubly-nested inner class, does it get two or
Stuart> just the innermost?
Just the immediate outer instance is passed in.
Suppose you're making an instance of a doubly-nested inner class:
class Outer {
class Middle {
class Inner {
}
}
}
You have to write something like <middle>.new Inner().
The <middle> instance here, however it was made, already has its own
'this$0' pointing at the instance of Outer.
Hmm, actually there is a weird case, I think, where both the
instantiated class and its superclass have outer instances. I forget
what happens in this situation.
Tom