==> Barker.java <== interface Barker { String speak(); } ==> BigDog.java <== public class BigDog implements Barker { public String speak() { return "WOOOF!"; } } ==> Kennel.java <== public interface Kennel { Barker getADog(); } ==> KennelA.java <== public class KennelA implements Kennel { public Barker getADog(){ return new BigDog(); } } ==> KennelB.java <== public class KennelB implements Kennel { public Barker getADog(){ return new LittleDog(); } } ==> LittleDog.java <== public class LittleDog implements Barker { public String speak() { return "yip"; } } ==> TestDogs.java <== class TestDogs { // can give them this test public static void main(String[] args) { Kennel kennelA = new KennelA(); Kennel kennelB = new KennelB(); Barker dogA = kennelA.getADog(); Barker dogB = kennelB.getADog(); System.out.println(dogA.speak() + " " + dogB.speak()); } // Output of the above is: "WOOOF! yip" }