public class TestTemplate { public static void main(String args[]) { Car automotiveRobot = new Car("Automotive"); Cooker cookieRobot = new Cooker("Cook"); automotiveRobot.go(); cookieRobot.go(); } } class Cooker extends Machine { private String name; public Cooker(String n) { name = n; } public void getParts() { System.out.println("Getting a flour and sugar...."); } public void assemble() { System.out.println("Baking a cookie...."); } public void test() { System.out.println("Crunching a cookie...."); } public String getName() { return name; } } class Car extends Machine { private String name; public Car(String n) { name = n; } public void getParts() { System.out.println("Getting a carburetor...."); } public void assemble() { System.out.println("Installing the carburetor...."); } public void test() { System.out.println("Revving the engine...."); } public String getName() { return name; } } abstract class Machine { public final void go() { start(); getParts(); assemble(); test(); stop(); } public void start() { System.out.println("Starting...."); } public void getParts() { System.out.println("Getting parts...."); } public void assemble() { System.out.println("Assembling...."); } public void test() { System.out.println("Testing...."); } public void stop() { System.out.println("Stopping...."); } }