import org.aspectj.testing.Tester; public class OrderOfExtendsPlusAndImplementsPlus { public static void main(String[] args) { try { new OrderOfExtendsPlusAndImplementsPlus().realMain(args); } catch (Throwable t) { Tester.throwable(t); } } public void realMain(String[] args) throws Exception { Class[] cs = new Class[]{C.class, D.class}; for (int i = 0; i < cs.length; i++) { check(cs[i]); } } private void check(Class c) { Tester.checkEq(c.getInterfaces()[0], I.class, c + " doesn't implement " + I.class); Tester.checkEq(c.getSuperclass(), S.class, c + " doesn't extend " + S.class); } } class S {} interface I {} class C {} class D {} aspect A { declare parents: C implements I; declare parents: C extends S; } aspect B { declare parents: D extends S; declare parents: D implements I; }