/**

Diese Variante der Klasse Punkt enthält:

 - Klassenattribute (AnzahlPunkte, MaxPunkte)
 - die Klassenmethode maximum
 - einen statischen Initialisierer
 - die Methode finalize()

*/
/*-----------------------------------------------------------------------*/

class Punkt
{
   int x, y;
   String name;
   static int AnzahlPunkte = 0;

   Punkt(int x, int y, String name)
   {  
      this.x = x; 
      this.y = y;
      this.name = name;
      AnzahlPunkte++;
   }

   Punkt()
   {  this(0, 0, "unbenannt");  }

   Punkt(String n)
   {  this(0, 0, n);  }

   Punkt(int a, int b)
   {  this(a, b, "unbenannt");  }
   
   double laenge()
   {  return Math.sqrt(x*x + y*y);  }

   /**
   *  Objektmethode maximum
   *  @param p Punkt, mit dem verglichen wird
   *  @return größerer der beiden Punkte
   */
   Punkt maximum(Punkt p)
   {  if (laenge() > p.laenge())
         return this;
      else
         return p;
   }

   /**
   *  Klassenmethode maximum
   *  @param p1 erster Punkt, mit dem verglichen wird
   *  @param p2 zweiter Punkt, mit dem verglichen wird
   *  @return größerer der beiden Punkte
   */
   static Punkt maximum(Punkt p1,Punkt p2)
   {  if (p1.laenge() > p2.laenge())
         return p1;
      else
         return p2;
   }

   /**
   *  Beender
   */
   public void finalize()
   {  System.out.println("\t>>> Aufruf finalize():" + AnzahlPunkte);
      AnzahlPunkte--;
      System.out.println("---. neue AnzahlPunkte : " + AnzahlPunkte);
   }   
   
   void zeige()
   {  System.out.println(
         name + "(" + x + "," + y + "), Anzahl= " + AnzahlPunkte);
   }
   
   void zeige(String txt)
   {  System.out.print(txt + ": ");
      zeige();
   }
}
