
abstract class Tier {

  private boolean kann_laufen;
  private boolean kann_fliegen;
  private int magen_fuellstand;

  protected abstract boolean kann_fressen( Tier target );

  public int magen_fuellstand () {
    return magen_fuellstand;
  }
  public boolean kann_laufen() {
    return kann_laufen;
  }
  public boolean kann_fliegen() {
    return kann_fliegen;
  }

  public boolean fresse( Tier target ) {
    if (kann_fressen( target )) {
      magen_fuellstand = magen_fuellstand + 10;
    }
    return true;
  }

  protected Tier ( boolean kann_laufen, boolean kann_fliegen ) {
  }
}


abstract class Lufttier extends Tier {
  protected abstract boolean kann_fressen( Tier target );

  protected Lufttier () {
    super ( false, true );
  }
}

class Adler extends Lufttier {

  public boolean kann_fressen( Tier target ) {
    if ((target instanceof Maus) | (target instanceof Katze))
      return true;
    else
      return false;
  }

  public Adler () {
    super ();
  }
}

abstract class Landtier extends Tier {

  private int anzahl_beine;
  private boolean laufen;

  public int anzahl_beine () {
    return anzahl_beine;
  }
  public void laufe () {
    laufen = true;
  }
  public void halte_an() {
    laufen = false;
  }

  protected Landtier ( int anzahl_beine ) {
    super ( true, false );
    this.anzahl_beine = anzahl_beine;
  }
}


class Katze extends Landtier {

  public boolean kann_fressen( Tier target ) {
    if (target instanceof Maus)
      return true;
    else
      return false;
  }

  public Katze () {
    super ( 4 );
  }
}

class Maus extends Landtier {

  public boolean kann_fressen( Tier target ) {
    return false;
  }

  public Maus () {
    super ( 4 );
  }
}