Achtung:

Dieses Wiki, das alte(!) Projektwiki (projektwiki.zum.de)
wird demnächst gelöscht.

Bitte sichere Deine Inhalte zeitnah,
wenn Du sie weiter verwenden möchtest.


Gerne kannst Du natürlich weiterarbeiten

im neuen Projektwiki (projekte.zum.de).

Vererbung - Interface: Unterschied zwischen den Versionen

Aus Projektwiki - ein Wiki mit Schülern für Schüler.
Wechseln zu: Navigation, Suche
(Abstrakte Methoden)
 
(10 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Zusammenfassung: Wer wagt sich ran? Wer wagt sich ran? Wer wagt sich ran? Wer wagt sich ran? Wer wagt sich ran? Wer wagt sich ran? Wer wagt sich ran? Wer wagt sich ran? Wer wagt sich ran? Wer wagt sich ran?
+
[[Datei:Vererbung.PNG|thumb|375px|right|Vererbung in der UML]]
 +
Vererbung dient zur Generalisierung von Klassen. Dabei werden in der Oberklasse Attribute und Methoden festgelegt, die von den Unterklassen übernommen werden. In diesen können weitere Attribute und Methoden ergänzt bzw. bestehende überschrieben.
  
== hier eine Überschrift, vielleicht Vererbung ==
+
Bei Interfaces werden nur Methodenköpfe festgelegt, die von den Unterklassen übernommen werden müssen.
Text, hier eventuell kurz, da das alle in der Jgst. 10 hatten
+
=== Unterüberschrift, kann sein muss nicht ===
+
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text
+
  
=== Unterüberschrift, kann sein muss nicht ===
+
== Vererbung ==
 +
Vererbung ist nötig, um Klassen zu generalisieren. In der Oberklasse werden Attribute und Methoden festgelegt, die bei allen Unterklassen gleich sind. Dabei können in einer Unterklasse die Attribute und Methoden um weitere ergänzt werden, und auch die bestehenden Methodenrümpfe können, müssen aber nicht ergänzt oder neu definiert (überschrieben) werden, um weitere Funktionen mit einzubinden. In Java kann eine Unterklasse von maximal einer Oberklasse erben.
  
== noch eine Überschrift, vielleicht abstrakte Klassen als das Neue  ==
 
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text
 
  
== und noch eine Überschrift?  ==
+
Um eine Vererbung herzustellen, muss in der Unterklasse das Schlüsselwort <tt>extends</tt> bei dem Klassennamen ergänzt werden.
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text
+
 
 +
    <tt>class UNTERKLASSE '''extends''' OBERKLASSE
 +
    {
 +
        ...
 +
    }</tt>
 +
 
 +
===== Vererbung in der UML =====
 +
In der UML(=Unified Modeling Language) ist die Vererbung durch einen Pfeil von der Unter- zur Oberklasse mit durchgezogener Linie und nichausgefüllter Spitze gekennzeichnet.
 +
 
 +
=== Überschreiben von Methoden ===
 +
Methoden von Oberklassen können in allen Unterklassen überschrieben werden. Die Methodenköpfe müssen dabei identisch sein, ansonsten wird lediglich eine neue Methode definiert. Um Fehler zu verhindern wird üblicherweise die <tt>@Override</tt> Anotation verwendet, um bei fehlerhaftem Überschreiben einer Methode einen Kompilierfehler auszulösen.
 +
 
 +
    <tt>@Override // Anotation
 +
    public void BeispielMethode() //Methodenkopf entspricht dem der Basismethode
 +
    {
 +
        //Methodenrumpf
 +
    }</tt>
 +
 
 +
=== Abstrakte Klassen ===
 +
Von abstrakten Klassen können keine Objekte erzeugt werden, sie fungieren nur als Oberklasse. Gekennzeichnet werden sie durch das Schlüsselwort <tt>abstract</tt> am Anfang des Quelltextes.
 +
 
 +
    <tt>'''abstract''' class OBERKLASSE
 +
    {
 +
        ...
 +
    }</tt>
 +
 
 +
=== Abstrakte Methoden ===
 +
Abstrakte Methoden werden in einer Abstrakten Klasse oder einem Interface deklariert und müssen in allen nicht-abstrakten direkten Unterklassen implementiert sein. Werden nicht alle abstrakten Methoden implementiert, so muss die Klasse selbst <tt>abstrakt</tt> sein. <BR>
 +
Eine abstrakte Methode besteht nur aus dem Methodenkopf, es gibt keinen Methodenrumpf.
 +
 
 +
 
 +
    <tt>'''abstract''' void Methode();</tt>
 +
 
 +
== Interface ==
 +
Das Interface ist eine Oberklasse, die der abstrakten Klasse sehr ähnlich ist, aber hier werden keine Attribute deklariert und initialisiert, die von den Unterklassen genutzt werden, sondern nur Methoden vererbt. Daher ist hier auch kein Konstruktor zu finden. Zudem sind die Methoden abstrakte Methoden, allerdings muss nicht das Schlüsselwort <tt>abstract</tt> ergänzt werden. Eine Unterklasse kann beliebig viele Interfaces implemetieren.
 +
 
 +
Interface-Methode:
 +
 
 +
    <tt>public void BeispielMethode(); </tt>
 +
 
 +
Eine Interface-Klasse wird durch das Schlüsselwort <tt>interface</tt> deklariert.
 +
 
 +
    <tt>public '''interface''' OBERKLASSE
 +
    {
 +
        //Methoden
 +
    } </tt>
 +
 
 +
Um von einer Unterklasse zu einem Interface eine Referenz zu erstellen, muss das Schlüsselwort <tt>implements</tt> wie bei Vererbung ergänzt werden. Die Besonderheit ist, dass eine Unterklasse mehrere Interfaces und eine normale Vererbung nutzen kann.
 +
 
 +
* Unterklasse, die ein Interfaces nutzt:
 +
    <tt>class UNTERKLASSE '''implements''' OBERKLASSE1
 +
    {
 +
        ...
 +
    }</tt>
 +
 
 +
* Unterklasse, die zwei Interfaces und eine Vererbung nutzt:
 +
    <tt>class UNTERKLASSE '''implements''' OBERKLASSE1, OBERKLASSE2 extends OBERKLASSE3
 +
    {
 +
        ...
 +
    }</tt>
 +
 
 +
Die Interfaces und die Methoden des Interfaces sollten generell <tt>public</tt> sein, da die Interfaces meist von mehreren Schichten genutzt werden.

Aktuelle Version vom 9. November 2013, 17:08 Uhr

Vererbung in der UML

Vererbung dient zur Generalisierung von Klassen. Dabei werden in der Oberklasse Attribute und Methoden festgelegt, die von den Unterklassen übernommen werden. In diesen können weitere Attribute und Methoden ergänzt bzw. bestehende überschrieben.

Bei Interfaces werden nur Methodenköpfe festgelegt, die von den Unterklassen übernommen werden müssen.

Inhaltsverzeichnis

Vererbung

Vererbung ist nötig, um Klassen zu generalisieren. In der Oberklasse werden Attribute und Methoden festgelegt, die bei allen Unterklassen gleich sind. Dabei können in einer Unterklasse die Attribute und Methoden um weitere ergänzt werden, und auch die bestehenden Methodenrümpfe können, müssen aber nicht ergänzt oder neu definiert (überschrieben) werden, um weitere Funktionen mit einzubinden. In Java kann eine Unterklasse von maximal einer Oberklasse erben.


Um eine Vererbung herzustellen, muss in der Unterklasse das Schlüsselwort extends bei dem Klassennamen ergänzt werden.

    class UNTERKLASSE extends OBERKLASSE
    {
        ...
    }
Vererbung in der UML

In der UML(=Unified Modeling Language) ist die Vererbung durch einen Pfeil von der Unter- zur Oberklasse mit durchgezogener Linie und nichausgefüllter Spitze gekennzeichnet.

Überschreiben von Methoden

Methoden von Oberklassen können in allen Unterklassen überschrieben werden. Die Methodenköpfe müssen dabei identisch sein, ansonsten wird lediglich eine neue Methode definiert. Um Fehler zu verhindern wird üblicherweise die @Override Anotation verwendet, um bei fehlerhaftem Überschreiben einer Methode einen Kompilierfehler auszulösen.

    @Override // Anotation
    public void BeispielMethode() //Methodenkopf entspricht dem der Basismethode
    {
        //Methodenrumpf
    }

Abstrakte Klassen

Von abstrakten Klassen können keine Objekte erzeugt werden, sie fungieren nur als Oberklasse. Gekennzeichnet werden sie durch das Schlüsselwort abstract am Anfang des Quelltextes.

    abstract class OBERKLASSE
    {
        ...
    }

Abstrakte Methoden

Abstrakte Methoden werden in einer Abstrakten Klasse oder einem Interface deklariert und müssen in allen nicht-abstrakten direkten Unterklassen implementiert sein. Werden nicht alle abstrakten Methoden implementiert, so muss die Klasse selbst abstrakt sein.
Eine abstrakte Methode besteht nur aus dem Methodenkopf, es gibt keinen Methodenrumpf.


    abstract void Methode();

Interface

Das Interface ist eine Oberklasse, die der abstrakten Klasse sehr ähnlich ist, aber hier werden keine Attribute deklariert und initialisiert, die von den Unterklassen genutzt werden, sondern nur Methoden vererbt. Daher ist hier auch kein Konstruktor zu finden. Zudem sind die Methoden abstrakte Methoden, allerdings muss nicht das Schlüsselwort abstract ergänzt werden. Eine Unterklasse kann beliebig viele Interfaces implemetieren.

Interface-Methode:

    public void BeispielMethode(); 

Eine Interface-Klasse wird durch das Schlüsselwort interface deklariert.

    public interface OBERKLASSE
    {
        //Methoden
    } 

Um von einer Unterklasse zu einem Interface eine Referenz zu erstellen, muss das Schlüsselwort implements wie bei Vererbung ergänzt werden. Die Besonderheit ist, dass eine Unterklasse mehrere Interfaces und eine normale Vererbung nutzen kann.

  • Unterklasse, die ein Interfaces nutzt:
    class UNTERKLASSE implements OBERKLASSE1
    {
        ...
    }
  • Unterklasse, die zwei Interfaces und eine Vererbung nutzt:
    class UNTERKLASSE implements OBERKLASSE1, OBERKLASSE2 extends OBERKLASSE3
    {
        ...
    }

Die Interfaces und die Methoden des Interfaces sollten generell public sein, da die Interfaces meist von mehreren Schichten genutzt werden.