import org.aspectj.testing.Tester; public class AddObjectOnAbstract { advice (I1 i1): i1 && String process() { before { i1.addA(); } } public static void main(String[] args) { test(); } public static void test() { AddObjectOnAbstract a = new AddObjectOnAbstract(); ConcreteC1 c1 = new ConcreteC1(); a.addObject(c1); Tester.checkEqual(c1.process(), "ab", ""); } } abstract class I1 { public String s = ""; public abstract void addA(); public abstract String process(); } class ConcreteC1 extends I1 { public void addA() { s += "a"; } public String process() { s += "b"; return s; } }