/*
Beispiel mit zwei Klassen und
einer gemeinsamen Methode print
diese wird in bier überschrieben
*/

public class bspklasse1 {

  //  einfache Beispiele OOP 
  static void bsp1(){
      // erstellen eines Objektes
     fluessigkeit b = new fluessigkeit("Hansa",100);

     // Ausgabe
    System.out.println( b.getName()
       +"  menge"+b.getMenge() );
       // veraendern der Menge
    b.addMenge(100);
    System.out.println( b.getName()
       +"  menge"+b.getMenge() );
       // veraendern der Menge
    b.subMenge(10);
    System.out.println( b.getName()
       +"  menge"+b.getMenge() );

    fluessigkeit b2 = new fluessigkeit("Sprudel 5000");

    System.out.println( b2.getName()
       +"  menge"+b2.getMenge() );

    } // bsp1

    
    // komplexeres Beispiel
    // Ein Kasten dient als Sammelbehaelter
    static void bsp2() {
      fluessigkeit [] kasten;
      kasten = new fluessigkeit[6];
      for (int i=0; i<3; i++) {
        kasten[i] = new fluessigkeit("Pepsi"+i,500);
      }
      for (int i=3; i<6; i++) {
        kasten[i] = new bier("Warsteiner"+i,500,15);
      }
      kasten[0].addMenge(100);
      kasten[1].addMenge(10);
      kasten[2].addMenge(200);
      kasten[3].addMenge(120);
      kasten[4].addMenge(150);
      kasten[5].addMenge(650);
      // Ausgabe, hier werden ZWEI
      // unterschiedliche Methode aufgerufen !
      for (int i=0; i<6; i++) {
        kasten[i].print();
      }

      // bestimme die Flasche, mit dem
      // maximalwert
      // Init mit dem ersten Wert
      int maxMenge=kasten[0].getMenge();
      int index =0;
      for (int i=1; i<kasten.length; i++) {
         if (kasten[i].getMenge()>maxMenge) {
           maxMenge=kasten[i].getMenge();
           index =i;
         }
      }
      System.out.println( "  Index: "+index+
      "Name: "+kasten[index].getName()+
      "maxmenge: "+maxMenge);

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

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

}


class  fluessigkeit {
   private String name;
   private int menge;

    // hier wird der gemeinsame Konstruktor aufgerufen
   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;
   }

}  // fluessigkeit


// abgeleitete Klasse
class bier extends fluessigkeit {
    double promille;

    // hier wird der gemeinsame Konstruktor aufgerufen
   public bier(String name,double promille) {
     this(name,100, promille);
   }
   public bier(String name, int menge,double promille) {
     super(name,menge);
     this.promille=promille;
   }

   // ueberschriebene Methode print
    public void print() {
       super.print(); // Aufruf der "oberen" Methode
       System.out.println( "  promille:"+promille );
   }


}

