rendered paste bodypublic interface Foo { void accept(Visitor v); }public class AFoo implements Foo { public void accept(Visitor v) { v.execute(this); }}public class BFoo implements Foo { public void accept(Visitor v) { v.execute(this); }}public interface Visitor { void execute(Foo f); }public class AVisitor implements Visitor { public void execute(Foo f) { System.out.println("AVisitor Foo"); } public void execute(AFoo a) { System.out.println("AVisitor AFoo"); } public void execute(BFoo a) { System.out.println("AVisitor BFoo"); }}public class BVisitor implements Visitor { public void execute(Foo f) { System.out.println("BVisitor Foo"); } public void execute(AFoo a) { System.out.println("BVisitor AFoo"); } public void execute(BFoo a) { System.out.println("BVisitor BFoo"); } public static void main(String[] args) { Foo a = new AFoo(); Foo b = new BFoo(); Visitor v = new AVisitor(); a.accept(v); b.accept(v); }}