\begin{slide}{Schnittstellen}

Eine Methode ohne Implementierung heißt \emph{abstrakt}
(Gegenteil von: \emph{konkret})

Eine Klasse mit wenigstens einer abstrakten Methode
muß als \verb|abstract class| deklariert sein.

Abstrakte Klassen haben keine Objekte
(können nicht instantiiert werden)\dots

\dots man kann aber von ihnen konkrete Klassen 
\emph{ableiten} (durch Implementieren der abstrakten Methoden).

Eine abstrakte Klasse mit nur abstrakten Methoden
wird kürzer als Schnittstelle (\verb|interface|) bezeichnet.

\end{slide}

\begin{slide}{Schnittstellen (Beispiel)}

Deklaration:
\begin{verbatim}
interface List<T> { T get (int index); ... }
\end{verbatim}

Implementierungen:
\begin{small}
\begin{verbatim}
class LinkedList<T> implements List<T> 
   { T get (int index) { ... } }
class ArrayList<T> implements List<T> 
   { T get (int index) { ... } }
\end{verbatim}
\end{small}

Benutzung:
\begin{verbatim}
{  List<String> l = new LinkedList<String> ();
   ... l.get (3) ...
}
\end{verbatim}
Deklarierter Typ sollte Interface sein (nicht Klasse). \\
(Zum polymorphen Containern siehe Vorlesung OO.)

\end{slide}
