interface Sammlerstueck
{
	double sammlerWert();
}

class Auto
{
	// Attribut
	String name;
	
	// Konstruktor
	Auto(String name)
	{
		this.name = name;
	}
}

class Oldtimer
extends Auto
implements Sammlerstueck
{
	// Attribut
	double wert;
	
	// Konstruktor
	Oldtimer(String name, double wert)
	{
		super(name);
		this.wert = wert;
	}
	
	// Operation
	public double sammlerWert()
	{
		return this.wert;
	}
}

class Schnittstellen
{
	public static void main(String[] args)
	{
		Oldtimer meinOldie = new Oldtimer("Bugatti 1927", 575000.0);

		// Zugriff auf Attribute der Klasse Olditmer ist möglich
		// Aufruf der Operation der Klasse Oldtimer ist möglich
		System.out.println(meinOldie.name);
		System.out.println(meinOldie.wert);
		System.out.println(meinOldie.sammlerWert());
		
		Auto meinAuto = meinOldie;
		// Der Oldtimer wird durch meinAuto nur noch als Auto betrachtet.
		// Zugriff auf Attribute der Klasse Auto ist möglich
		// Zugriff auf zusätzliche Attribute der Klasse Oldtimer
		// und Aufruf der Operation der Klasse Oldtimer ist nicht möglich
		System.out.println(meinAuto.name);
		// System.out.println(meinAuto.wert);
		// System.out.println(meinAuto.sammlerWert());
		
		// Der Oldtimer wird durch meinSammlerstueck nur noch als 
		// Sammlerstueck betrachtet.
		// Die Operation des Interface Sammlerstueck können aufgerufen werden.
		// Die Attribute der Klasse Oldtimer können nicht zugegriffen werden.
		Sammlerstueck meinSammlerstueck = meinOldie;
		// System.out.println(meinSammlerstueck.name);
		// System.out.println(meinSammlerstueck.wert);
		System.out.println(meinSammlerstueck.sammlerWert());
	}
}
