import java.util.ArrayList; interface INode<P, C> { INode<P, C> getParent(); } abstract aspect NodeImpl<Parent, Child> { declare parents : Child implements INode<Parent, Child>; declare parents : Parent implements INode<Parent, Child>; public final INode<Parent, Child> INode.getParent() { return null; } } public class SimpleTest { public static void main(String[] args) { Tag tag1 = new Tag(); Tag tag2 = new Tag(); tag1.getParent(); } } class Tag { } aspect X extends NodeImpl<Tag,Tag> {}