==> Dealer.java <== public interface Dealer { Speed getACar(); } ==> DealerA.java <== public class DealerA implements Dealer { public Speed getACar(){ return new FastCar(); } } ==> DealerB.java <== public class DealerB implements Dealer { public Speed getACar(){ return new SlowCar(); } } ==> FastCar.java <== public class FastCar implements Speed { public String howFast() { return "FAST!"; } } ==> SlowCar.java <== public class SlowCar implements Speed { public String howFast() { return "Not so fast"; } } ==> Speed.java <== interface Speed { String howFast(); } ==> TestCars.java <== class TestCars { public static void main(String[] args) { Dealer DealerA = new DealerA(); Dealer DealerB = new DealerB(); Speed carA = DealerA.getACar(); Speed carB = DealerB.getACar(); System.out.println(carA.howFast() + " " + carB.howFast()); } // Output of the above is: "FAST! Not so fast" }