/*
Beispiel mit drei Klassen und
einem gemeinsamen Interface
*/

import java.io.*;

public class bspklasse2 {

   private static void pause() {
    try {
      System.in.read();
    }
    catch (IOException e) {
    }
  }  // pause

     // der Einkaufskorb speichert "Objekte" des
     // Interfaces IWare
    static void bsp3() {
      IWare [] ekorb;
      ekorb = new IWare[6];
      for (int i=0; i<3; i++) {
        ekorb[i] = new fluessigkeit("Pepsi"+i,500);
      }
      for (int i=3; i<5; i++) {
        ekorb[i] = new bier("Warsteiner"+i,500,15);
      }
      ekorb[5] = new Obstkorb(1600);

      //  cast
      fluessigkeit f = (fluessigkeit) ekorb[0];
      // setzen
      f.addMenge(100);
      ((fluessigkeit)ekorb[1]).addMenge(10);
      ((fluessigkeit)ekorb[2]).addMenge(200);
      ((fluessigkeit)ekorb[3]).addMenge(120);
      ((fluessigkeit)ekorb[4]).addMenge(150);
      //ekorb[5].addMenge(650);  // gibt es nicht im Interface
      // ausgabe
      for (int i=0; i<6; i++) {
        ekorb[i].print();
      }


      // bestimme die Waren, mit dem maximalwert
      // Init mit dem ersten Wert
      int maxMenge=ekorb[0].getAnzahlMenge();
      int index =0;
      for (int i=1; i<ekorb.length; i++) {
         if (ekorb[i].getAnzahlMenge()>maxMenge) {
           maxMenge=ekorb[i].getAnzahlMenge();
           index =i;
         }
      }
      // Hier nur Ausgabe der Maximalmenge und des Index
      System.out.println(
      "maxmenge: "+maxMenge+"  "+index);
      ekorb[index].print();
    }  // bsp2

  public static void main(String argv[]) {
    // bsp1()
    bsp3();
    pause();
  }  // main

}

interface IWare {
  int getAnzahlMenge();
  void print();
}

class  fluessigkeit implements IWare {
   private String name;
   private int menge;

   public fluessigkeit(String name) {
     this(name,100);
   }
   public fluessigkeit(String name, int menge) {
     this.name=name;
     this.menge=menge;
   }


   public void print() {
    System.out.println( getName()
       +"  menge"+getMenge() );
   }

   public int getMenge() {
     return menge;
   }
   public void setMenge(int menge)  {
     this.menge=menge;
   }
   public void addMenge(int menge)  {
     this.menge+=menge;
   }
   public void subMenge(int menge)  {
     this.menge-=menge;
   }

   public String getName() {
     return name;
   }
   public int getAnzahlMenge() {
     return menge;
   }

}  // fluessigkeit

class bier extends fluessigkeit {
    double promille;

   public bier(String name,double promille) {
     this(name,100, promille);
   }
   public bier(String name, int menge,double promille) {
     super(name,menge);
     this.promille=promille;
   }

    public void print() {
       super.print();
       System.out.println( "  promille:"+promille );
   }


}


class Obstkorb implements IWare{
  private int Anzahl;

  public Obstkorb(int Anzahl) {
     this.Anzahl = Anzahl;
  }

  public int getAnzahlMenge() {
    return Anzahl;
  }
  public void print() {
    System.out.println("Obstkorb: "+Anzahl);
  }
}
