Dan,

> On 29 Oct 2020, at 21:29, Dan Smith <daniel.sm...@oracle.com> wrote:
> 
>> ...
> 
>> "C does not have its ACC_PUBLIC flag set (4.1) and the superclass belongs to 
>> a different run-time package than C.” - I get that there is a bidirectional 
>> accessibility relationship between the superclass and the subclass, but this 
>> seems at odds with JEP text:  “In particular, a subclass may be less 
>> accessible than the sealed class”. Why is this not that the superclass must 
>> have ACC_PUBLIC, and not the subclass?
> 
> The goal of this rule is to simulate resolution without actually asking to 
> perform it, since the class hasn't even been created yet. Part of resolution 
> is access checking, so we simulate it here.
> 
> The JEP says "a permitted subclass and its sealed superclass must be 
> accessible to each other. However, permitted subclasses need not have the 
> same accessibility as each other, or as the sealed class."
> 
> Keep in mind we're talking now about language-level accessibility, which 
> doesn't always map to JVM accessibility.

Understood. My question is only related to accessibility in the JVM.

> Anyway, some examples:
> public super, non-public sub, same package
> package-access super, private sub, same package
> public *and exported* super, public sub
> private super, public sub, same nest

Thanks for these examples, they are helpful.

Here is one more:
  public super, non-public sub, same module, DIFF package

The draft text [*] seems to explicitly disallow this (which I believe is 
incorrect, or at least I don’t understand why).

[*] “ ... derivation fails with a IncompatibleClassChangeError: ...
   * C does not have its ACC_PUBLIC flag set (4.1) and the superclass belongs 
to a different run-time package than C.  …"

I believe that the intent is that “SUPERCLASS does not have its ACC_PUBLIC flag 
set (4.1) and C belongs to a different run-time package than SUPERCLASS” - not 
the other way around. No?

-Chris.


Reply via email to