class A { abstract foo(); } class B extends A {} abstract class C extends A {} class D extends A { foo() {} } abstract class E extends A { foo() {} } abstract class AA { abstract foo(); } class BB extends AA {} abstract class CC extends AA {} class DD extends AA { foo() {} }