I.super.f() usage in Java 8

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Thu Sep 11 17:16:16 UTC 2014


Hi John,
yes - this appears to be a bug; I filed this as:

https://bugs.openjdk.java.net/browse/JDK-8058244

Thanks
Maurizio


On 11/09/14 16:53, John Spicer wrote:
> Java 8 supports a new user of super:
>
> interface I {
> 	default int f(){return 0;}
> }
>
> class X implements I {
> 	public int f() {
> 		return I.super.f();
> 	}
> }
>
> This is described in 15.12.1.
>
> However, there is wording in 15.12.1 that says:  Let T be the type declaration immediately enclosing the method invocation. It is a compile-time error if Iis not a direct superinterface of T, or if there exists some other direct superclass or direct superinterface of T, J, such that J is a subtype of I.
>
> That would seem to require an error on this case, because T has a superclass of J, which is a subtype of I.
>
> interface I {
>          default int f(){return 0;}
> }
> class J implements I { }
> class T extends J implements I {
>          public int f() {
>                  return I.super.f();
>          }
> }



More information about the compiler-dev mailing list