/**
   Klasse Limousine (zu Auto (10))
   @author Benedikt Großer, Holger Arndt
   @version 08.04.2003
*/
public class Limousine extends Auto
{
  // Objektattribute
  int sicherheitsKategorie;

  // Konstruktoren
  public Limousine()
  {
    this.sicherheitsKategorie = 3;
  }

  public Limousine(double tachoStand, int sicherheitsKategorie)
  {
    super(tachoStand);
    if ((sicherheitsKategorie > 0) && (sicherheitsKategorie < 4))
      this.sicherheitsKategorie = sicherheitsKategorie;
    else
      this.sicherheitsKategorie = 3;
  }

  // Ergaenzung um die Methoden
  // setzeSicherheitsKategorie()
  // leseSicherheitsKategorie()
  public void setzeSicherheitsKategorie(int sicherheitsKategorie)
  {
    if ((sicherheitsKategorie > 0) && (sicherheitsKategorie < 4))
      this.sicherheitsKategorie = sicherheitsKategorie;
  }

  public int leseSicherheitsKategorie()
  { return this.sicherheitsKategorie; }

  // ueberlagert die Mehode ausgeben() von Auto.
  public void ausgeben()
  {
    super.ausgeben();
    System.out.println("Kategorie = " + sicherheitsKategorie);
  }

  // Methode main zum Testen
  public static void main(String argv[])
  {
    Limousine jaguar = new Limousine();
    jaguar.fahren(300);
    jaguar.ausgeben();
    
    Auto meinPKW = new Auto();
    meinPKW.ausgeben();

    // erweiternde Konvertierung
    meinPKW = jaguar;
    meinPKW.ausgeben();

    Auto zweiCV = new Auto();
    zweiCV.abschleppen(jaguar, 200);
    zweiCV.ausgeben();
    jaguar.ausgeben();

    Limousine daimler = new Limousine(5000, 2);
    // einschraenkende Konvertierung
    try
      {
	daimler = (Limousine)zweiCV;  // Fehler
      }
    catch (ClassCastException cce)
      {
	System.out.println("Cast war nicht möglich");
      }
    daimler.ausgeben();
    try
      {
	daimler = (Limousine)meinPKW; // OK, meinPKW ist Limousine
      }
    catch (ClassCastException cce)
      {
	System.out.println("Cast war nicht möglich");
      }
    daimler.ausgeben();
  }
  
} // ende: class Limousine
