abstract class ApplicationFramework { public ApplicationFramework() { templateMethod(); // Dangerous! } abstract void customize1(); abstract void customize2(); final void templateMethod() { for (int i = 0; i < 5; i++) { customize1(); customize2(); } } } class MyApp extends ApplicationFramework { void customize1() { System.out.print("Hello "); } void customize2() { System.out.println("World!"); } } public class TemplateMethod { public static void main(String args[]) { MyApp app = new MyApp(); } }