Lecture Videos
  1  public class TestEdible {
  2    public static void main(String[] args) {
  3      Object[] objects = {new Tiger(), new Chicken(), new Apple()};
  4      for (int i = 0; i < objects.length; i++) {
  5        if (objects[i] instanceof Edible)
  6          System.out.println(((Edible)objects[i]).howToEat());
  7  
  8        if (objects[i] instanceof Animal) {
  9          System.out.println(((Animal)objects[i]).sound());
 10        }
 11      }
 12    }
 13  }
 14  
 15  abstract class Animal {
 16    private double weight;
 17    
 18    public double getWeight() {
 19      return weight;
 20    }
 21    
 22    public void setWeight(double weight) {
 23      this.weight = weight;
 24    }
 25    
 26    /** Return animal sound */
 27    public abstract String sound();
 28  }
 29  
 30  class Chicken extends Animal implements Edible {
 31    @Override
 32    public String howToEat() {
 33      return "Chicken: Fry it";
 34    }
 35      
 36    @Override
 37    public String sound() {
 38      return "Chicken: cock-a-doodle-doo";
 39    }
 40  }
 41  
 42  class Tiger extends Animal {
 43    @Override
 44    public String sound() {
 45      return "Tiger: RROOAARR";
 46    }
 47  }
 48  
 49  abstract class Fruit implements Edible {
 50    // Data fields, constructors, and methods omitted here
 51  }
 52  
 53  class Apple extends Fruit {
 54    @Override
 55    public String howToEat() {
 56      return "Apple: Make apple cider";
 57    }
 58  }
 59  
 60  class Orange extends Fruit {
 61    @Override
 62    public String howToEat() {
 63      return "Orange: Make orange juice";
 64    }
 65  }