jls overridding description

konstantin barzilovich konstantin.barzilovich at oracle.com
Thu May 21 13:20:56 UTC 2015


Hello,

It was interesting example. I didn't think about this.
Now I see that both conditions are required.

Thanks for clarification,
Konstantin.

On 20.05.2015 18:50, Dan Smith wrote:
>> On May 20, 2015, at 7:24 AM, konstantin barzilovich <konstantin.barzilovich at oracle.com> wrote:
>>
>> Hello,
>>
>> Thank you for the answer.
>> As I understand, you said that jls-8.4.8.1-100-B can be false while jls-8.4.8.1-100-C is true.
> Right: you can have mC with a subsignature of mA, but still inherit mA.
>
>> But is it possible that jls-8.4.8.1-100-C is false while jls-8.4.8.1-100-B is true? (the opposite situation)
> Can you not inherit mA, but choose an mC that does not have a subsignature of mA?  Sure.  Note that the selection of mA and mC is pretty unrestricted -- this subsignature clause it what limits the set of methods to things you'd intuitively expect to consider.
>
> So, for example:
>
> public class A {
>      public void foo() {} // mA
> }
>
> public class B {
>      public void bar(int arg) {} // mC
>      public void foo() {}
> }
>
> Is A a superclass of C?  Yep.  Does C inherit mA?  Nope -- the declaration of another 'foo' method prevents it.  Is mA public?  Yep.
>
> But mC definitely does not override mA.
>
> —Dan



More information about the compiler-dev mailing list