> On Feb 12, 2022, at 10:16 PM, Srikanth Adayapalam > <srikanth.adayapa...@oracle.com> wrote: > > I understand Frederic is asking about whether the spec​ inadvertently allows > something it should not - Here anyway is javac behavior: > > Given: > > abstract class A implements ValueObject { > int x; > } > > on compile: > X.java:1: error: The type A attempts to implement the mutually incompatible > interfaces ValueObject and IdentityObject > abstract class A implements ValueObject { > ^ > 1 error
Yep, this is expected and consistent: javac sees the field and infers the superinterface IdentityObject (per the language rules), then detects the conflict between interfaces. A slightly more interesting variation: declare a simple interface Foo; change to 'A implements Foo'. This compiles fine, inferring A implements IdentityObject. Then separately compile Foo so that it extends ValueObject. No compilation error, but the JVM should detect the IdentityObject/ValueObject conflict when A is loaded. To generate the kind of class files Fred asked about, you'd need to use something other than javac.