Re: scope rules in enums
On Jul 9, 11:27 am, "
Roedy Green wrote ...
Has anyone ever sorted out what the various visibility scope keywords
mean inside an enum. What can methods of the enum as a whole see?
that can methods of enum constants see?
Scott A. Hightower wrote:
Not sure what you mean by "visibility scope keywords."
I'm going with 'public', "='protected', '' (package-private) and
'private'.
An enum is implicitly static,
Only a nested 'enum' is, of course.
but I found nothing special about the access
modifiers (public, protected, private, default) in the language spec as
regards enums.
There isn't anything special about the keywords /per se/, but there
are emergent phenomena.
As far as what methods of those class bodies can see, I don't expect the
rules to be different than for a more normal class. That is, the acces=
s
They aren't, but 'enum's do funky things that interact with
visibility.
modifiers should be ignored by code anywhere in the enclosing declaration=
..
That is not the rule, precisely, but I think I know what you're
getting at.
They should matter for code in an extending class, if they are not both
You can't extend an 'enum', except implicitly by declaring a constant
body.
enclosed in some other declaration--and subject, of course, to whether th=
e
extending class is in the same package or not.
Moot point.
You cannot explicitly extend an 'enum' clsss. Constant bodies
actually do extend the enclosing 'enum', implicitly, with an anonymous
class, which is therefore an inner class.
That means that constant bodies *inherit* the non-private methods of
the 'enum' itself, and can override them. However, 'private' methods
of the 'enum' are accessible to constant bodies but not heritable,
AIUI. While this is a bit funky in an 'enum' due to the implicit
nature of the inheritance, the rules are exactly the same as for any
inner class that extends the enclosing class.
--
Lew