Run the following interface example in BlueJ. Make sure you understand how it works.
/** * This is a very simple and rather ridiculous example of an interface. * An interface is simply a class that has a list of methods with NO implementation. */ public interface Flier { /** * All interface methods must be public and abstract, and are both by default. */ public abstract String fly(); // public abstract by default public abstract String land(); // public abstract by default }
public class Bird implements Flier { public Bird() { } public String fly() { return "flap my wings"; } public String land() { return "on two feet"; } public String speak() { return "tweet tweet"; } }
public class Plane implements Flier { public Plane() { } public String fly() { return "use jet engines"; } public String land() { return "on my wheels"; } }
public class Superhero implements Flier, CrimeFighter { public Superhero() { } public String fly() { return "with super powers"; } public String land() { return "on my feet"; } public String fightsWith() { return "with super strength"; } }
public interface CrimeFighter { String fightsWith(); }
public class flightTester { public static void main(String[] args) { /** * The same method name can be in different objects (polymorphism). * During run time Java determines which method of same name to use * (late or dynamic binding) */ Bird Tweety = new Bird(); System.out.println("\nBird"); System.out.println("Fly: " + Tweety.fly()); System.out.println("Land: " + Tweety.land()); System.out.println("Speak: " + Tweety.speak()); // COMPILE TIME ERROR --- can NOT instantiate an interface Flier Bob = new Flier(); // Can only use methods found in Flier, but uses the implementations found // in Bird. Flier Polly = new Bird(); System.out.println("\nBird"); System.out.println("Fly: " + Polly.fly()); System.out.println("Land: " + Polly.land()); // COMPILE TIME ERROR --- compile time error because speak method is not in Flier System.out.println("Speak: " + Polly.speak()); // Flier can be cast to subclass System.out.println("Speak: " + ((Bird)Polly).speak()); Flier jet = new Plane(); System.out.println("\nPlane"); System.out.println("Fly: " + jet.fly()); System.out.println("Land: " + jet.land()); // RUNTIME ERROR --- Flier can NOT cast to wrong subclass System.out.println("Speak: " + ((Bird)jet).speak()); Superhero Superman = new Superhero(); System.out.println("\nSuperhero"); System.out.println("Fly: " + Superman.fly()); System.out.println("Land: " + Superman.land()); System.out.println("Fights: " + Superman.fightsWith()); } }