class Animal {
  public void eat() { System.out.println(this + " is eating"); }
  public String toString () { return "Animal"; }
}
class Mammal extends Animal {
  public void suckMilk() { System.out.println(this + " is sucking"); }
  public String toString () { return "Mammal"; }
}
class Dog extends Mammal {
  public void bark() { System.out.println(this + " is barking"); }
  public String toString () { return "Dog"; }
}
public class Zoo {
  public static void main (String args[]) {
    Animal a1 = new Animal();
    Animal a2 = new Mammal();
    Animal a3 = new Dog();
    System.out.println(a1);                       // 1
    System.out.println(a2);                       // 2
    System.out.println(a3);                       // 3
    a1.eat();                                     // 4
    a2.suckMilk();                                // 5
    a2.eat();                                     // 6
    Dog d1 = args.length > 1 ? a3 : new Dog();    // 7
    Mammal m1 = d1;                               // 8
    d1.bark();                                    // 9
    m1.suckMilk();                                // 10
    d1.suckMilk();                                // 11
    Dog d2 = (Dog)a3;                             // 12
    a3.bark();                                    // 13
    d2.bark();                                    // 14
    Dog d3 = (Dog)a2;                             // 15
  }
}
