<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=Klasse_%28Objektorientierung%29</id>
	<title>Klasse (Objektorientierung) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://demowiki.knowlus.com/index.php?action=history&amp;feed=atom&amp;title=Klasse_%28Objektorientierung%29"/>
	<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=Klasse_(Objektorientierung)&amp;action=history"/>
	<updated>2026-04-10T16:23:43Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Demo Wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://demowiki.knowlus.com/index.php?title=Klasse_(Objektorientierung)&amp;diff=6795&amp;oldid=prev</id>
		<title>imported&gt;Itti: Änderungen von ~2025-50902-2 (Diskussion) auf die letzte Version von Innobello zurückgesetzt</title>
		<link rel="alternate" type="text/html" href="https://demowiki.knowlus.com/index.php?title=Klasse_(Objektorientierung)&amp;diff=6795&amp;oldid=prev"/>
		<updated>2025-09-02T11:42:44Z</updated>

		<summary type="html">&lt;p&gt;Änderungen von &lt;a href=&quot;/index.php?title=Spezial:Beitr%C3%A4ge/~2025-50902-2&quot; title=&quot;Spezial:Beiträge/~2025-50902-2&quot;&gt;~2025-50902-2&lt;/a&gt; (&lt;a href=&quot;/index.php?title=Benutzer_Diskussion:~2025-50902-2&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer Diskussion:~2025-50902-2 (Seite nicht vorhanden)&quot;&gt;Diskussion&lt;/a&gt;) auf die letzte Version von &lt;a href=&quot;/index.php?title=Benutzer:Innobello&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer:Innobello (Seite nicht vorhanden)&quot;&gt;Innobello&lt;/a&gt; zurückgesetzt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:KlasseObjektBeispiel.png|mini|Beispielklasse &amp;#039;&amp;#039;Mitarbeiter&amp;#039;&amp;#039; (oben) mit zwei Instanzen (unten rechts und links).]]&lt;br /&gt;
Unter einer &amp;#039;&amp;#039;&amp;#039;Klasse&amp;#039;&amp;#039;&amp;#039; (auch &amp;#039;&amp;#039;&amp;#039;Objekttyp&amp;#039;&amp;#039;&amp;#039; genannt) versteht man in der [[Objektorientierte Programmierung|objektorientierten Programmierung]] ein abstraktes Modell bzw. einen &amp;#039;&amp;#039;Bauplan&amp;#039;&amp;#039; für eine Reihe von ähnlichen [[Objekt (Programmierung)|Objekten]].&lt;br /&gt;
&lt;br /&gt;
Die Klasse dient als Bauplan für die Abbildung von realen Objekten in Softwareobjekte und beschreibt [[Attribut (Programmierung)|Attribute]] (Eigenschaften) und [[Methode (Programmierung)|Methoden]] (Verhaltensweisen) der Objekte. Verallgemeinernd könnte man auch sagen, dass eine Klasse dem [[Datentyp]] eines Objekts entspricht.&lt;br /&gt;
&lt;br /&gt;
== Vererbung ==&lt;br /&gt;
Klassen können miteinander in &amp;#039;&amp;#039;hierarchischen Beziehungen&amp;#039;&amp;#039; stehen und zu komplexen Strukturen werden. Die Gesetzmäßigkeiten, nach denen diese gebildet werden, beschreibt das grundlegende Konzept der [[Vererbung (Programmierung)|Vererbung]]. Hier sind weiterhin die Begriffe &amp;#039;&amp;#039;[[Basisklasse]]&amp;#039;&amp;#039; und &amp;#039;&amp;#039;[[abgeleitete Klasse]]&amp;#039;&amp;#039; von Bedeutung, um die Verhältnisse der Klassen untereinander zu charakterisieren. Dabei beschreibt die Basisklasse allgemeine Eigenschaften, ist also eine &amp;#039;&amp;#039;Verallgemeinerung&amp;#039;&amp;#039; der abgeleiteten Klassen. Diese sind somit &amp;#039;&amp;#039;Spezialisierungen&amp;#039;&amp;#039; der Basisklasse.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Basisklasse &amp;lt;code&amp;gt;Kraftfahrzeug&amp;lt;/code&amp;gt; ist Verallgemeinerung der abgeleiteten Klassen (Spezialisierungen) &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LKW&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Motorrad&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Traktor&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dabei „erben“ die abgeleiteten Klassen alle Eigenschaften und [[Methode (Programmierung)|Methoden]] der [[Basisklasse]] (d.&amp;amp;nbsp;h., ein Motorrad hat alle Eigenschaften eines Kraftfahrzeugs, und man kann alles mit ihm machen, das man mit einem Kraftfahrzeug machen kann). Zusätzlich führt die [[abgeleitete Klasse]] &amp;#039;&amp;#039;zusätzliche&amp;#039;&amp;#039; Eigenschaften und Methoden ein, die bei ihren [[Objekt (Programmierung)|Objekten]] möglich sind. Das Motorrad hat z.&amp;amp;nbsp;B. einen Gepäckträger, ein Auto nicht, dafür aber einen Kofferraum.&lt;br /&gt;
&lt;br /&gt;
== Programmierstil ==&lt;br /&gt;
In vielen [[Programmiersprache]]n [[Programmierstil|ist es üblich]], dass der Name einer Klasse mit einem Großbuchstaben beginnt und in [[Camel Case|Camel-Case]]-Notation geschrieben wird (Namenskonventionen von Java, JavaScript, .NET, Objective-C, PHP, Perl, Python, Swift). Die Namen der [[Variable (Programmierung)|Variablen]] dagegen werden bei manchen Programmiersprachen mit einem Kleinbuchstaben begonnen.&lt;br /&gt;
&lt;br /&gt;
== Vergleich mit Verbund ==&lt;br /&gt;
Ähnlich der Klasse ist der [[Verbund (Datentyp)|Verbund]] ein Werkzeug zum Verwalten von zusammengehörigen Attributen. Er ist ein zusammengesetzter [[Datentyp]] aus verschiedenen anderen Datentypen. Die einzelnen Komponenten können als Attribute des neuen Verbundtyps betrachtet werden. Je nach [[Programmiersprache]] können sich Verbund und Klasse mehr oder weniger stark unterscheiden. Beispiele für Unterschiede sind:&amp;lt;!-- wäre es nicht möglich genauer zu benennen, ob Verbund oder Klasse gemeint ist bei den Unterschieden? --&amp;gt;&lt;br /&gt;
* Eigene [[Methode (Programmierung)|Methoden]] und welche Arten möglich sind&lt;br /&gt;
* Speicherverwaltung&lt;br /&gt;
* Verhalten bei Zuweisung (nur Referenz, [[flache Kopie]], tiefe Kopie)&lt;br /&gt;
* Nutz- und Definierbarkeit von Standardoperatoren&lt;br /&gt;
* [[Vererbung (Programmierung)|Vererbbarkeit]]&lt;br /&gt;
* Unterstützung von [[Sichtbarkeit (Programmierung)|Sichtbarkeiten]], die nicht &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; sind&lt;br /&gt;
* Unterstützung von [[Verbund (Datentyp)#Unions|Unions]]&lt;br /&gt;
* Als Attribut zulässige Arten von Typen (Klassen, zusammengesetzte Typen, einfache Typen)&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== C# ===&lt;br /&gt;
Als Beispiel soll eine [[Lampe]] dienen. Eine Lampe kann verschiedene Eigenschaften (Attribute) besitzen, zum Beispiel Farbe, Gewicht und ob sie leuchtet. Da man mit den Eigenschaften Farbe und Größe wenig operieren kann, wäre eine sinnvolle Verhaltensweise demnach eine Lichtschalter-Methode, die den jeweiligen Zustand von an und aus bestimmt.&lt;br /&gt;
&lt;br /&gt;
Beispiel-[[Implementierung]] in [[C-Sharp|C#]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
class Lampe {&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
    Color gehaeusefarbe;&lt;br /&gt;
    double gewicht;&lt;br /&gt;
    Color lichtfarbe;&lt;br /&gt;
    double helligkeit;&lt;br /&gt;
    bool istEingeschaltet;&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    void einschalten() {&lt;br /&gt;
        istEingeschaltet = true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    void ausschalten() {&lt;br /&gt;
        istEingeschaltet = false;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Konzept der &amp;#039;&amp;#039;[[Vererbung (Programmierung)|Vererbung]]&amp;#039;&amp;#039; lässt sich daran zeigen, dass es verschiedene Arten von Lampen gibt, z.&amp;amp;nbsp;B. Straßenlaternen, Taschenlampen oder Autoscheinwerfer. Diese speziellen Lampenarten sind dann &amp;#039;&amp;#039;Unterklassen&amp;#039;&amp;#039; der Klasse &amp;lt;code&amp;gt;Lampe&amp;lt;/code&amp;gt;, d.&amp;amp;nbsp;h. sie besitzen zusätzliche Attribute (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;Taschenlampe.maximaleLeuchtdauer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Autoscheinwerfer.istKippbar&amp;lt;/code&amp;gt;) und Methoden (z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;Taschenlampe.batterieLaden()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Autoscheinwerfer.fernlichtEinschalten()&amp;lt;/code&amp;gt;). Die Attribute und Methoden der Klasse &amp;lt;code&amp;gt;Lampe&amp;lt;/code&amp;gt; werden übernommen und gelten auch für die Unterklassen. Für diese speziellen Klassen ist die Klasse &amp;lt;code&amp;gt;Lampe&amp;lt;/code&amp;gt; eine &amp;#039;&amp;#039;Basisklasse&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
In [[C-Sharp|C#]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
// Unterklassen der Klasse Lampe&lt;br /&gt;
&lt;br /&gt;
class Taschenlampe : Lampe {&lt;br /&gt;
    // zusätzliche Eigenschaften&lt;br /&gt;
    double maximaleLeuchtdauer;&lt;br /&gt;
&lt;br /&gt;
    // zusätzliche Methoden&lt;br /&gt;
    void batterieLaden() {&lt;br /&gt;
        // Implementierung der Methode&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Autoscheinwerfer : Lampe {&lt;br /&gt;
    // zusätzliche Eigenschaften&lt;br /&gt;
    bool istKippbar;&lt;br /&gt;
&lt;br /&gt;
    // zusätzliche Methoden&lt;br /&gt;
    void fernlichtEinschalten() {&lt;br /&gt;
        // Implementierung der Methode&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Klasse kann als Datentyp verwendet werden (z.&amp;amp;nbsp;B. für Attribute oder [[Methode (Programmierung)|Methoden]]-[[Parameter (Informatik)|Parameter]]).&lt;br /&gt;
&lt;br /&gt;
Beispiel: Ein [[Parlament]] besteht aus mehreren [[Abgeordneter|Abgeordneten]], die &amp;lt;code&amp;gt;Person&amp;lt;/code&amp;gt; sowie meistens Mitglieder einer &amp;lt;code&amp;gt;Partei&amp;lt;/code&amp;gt; sind. Die Klasse &amp;lt;code&amp;gt;Abgeordneter&amp;lt;/code&amp;gt; ist als Unterklasse der Klasse &amp;lt;code&amp;gt;Person&amp;lt;/code&amp;gt; umgesetzt. Jedes Parlament hat einen Abgeordneten als Vorsitzenden. Die Klasse &amp;lt;code&amp;gt;Parlament&amp;lt;/code&amp;gt; kann eine Methode &amp;lt;code&amp;gt;setzeVorsitzenden(...)&amp;lt;/code&amp;gt; definieren mit diesem &amp;lt;code&amp;gt;Abgeordneter&amp;lt;/code&amp;gt; als Parameter; sie setzt das Attribut &amp;lt;code&amp;gt;vorsitzender&amp;lt;/code&amp;gt; auf den angegebenen „Wert“. Zusätzlich wird eine Methode &amp;lt;code&amp;gt;gibAnzahlDerAbgeordneten(...)&amp;lt;/code&amp;gt; implementiert, die einen Parameter der Klasse &amp;lt;code&amp;gt;Partei&amp;lt;/code&amp;gt; erhält und die Anzahl der Abgeordneten dieser Partei zurückgibt.&lt;br /&gt;
&lt;br /&gt;
Mögliche [[C-Sharp|C#]]-Implementierung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
class Person {&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
    string vorname;&lt;br /&gt;
    string nachname;&lt;br /&gt;
    Date geburtsdatum;&lt;br /&gt;
    List&amp;lt;string&amp;gt; nationalitaeten;&lt;br /&gt;
    string MailAdresse;&lt;br /&gt;
    string Postanschrift;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Partei {&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
    string name;&lt;br /&gt;
    List&amp;lt;Person&amp;gt; mitglieder;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Unterklasse der Klasse Person&lt;br /&gt;
class Abgeordneter: Person {&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
    Partei partei;&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    Partei gibPartei() {&lt;br /&gt;
        return partei;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Parlament {&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
    Abgeordneter vorsitzender;&lt;br /&gt;
    int maximalGroesse;&lt;br /&gt;
&lt;br /&gt;
    // Liste von Objekten der Klasse Abgeordneter&lt;br /&gt;
    List&amp;lt;Abgeordneter&amp;gt; listeAbgeordnete = new List&amp;lt;Abgeordneter&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    void setzeVorsitzenden(Abgeordneter abgeordneter) {&lt;br /&gt;
        vorsitzender = abgeordneter;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    int gibAnzahlDerAbgeordneten(Partei partei) {&lt;br /&gt;
        int anzahl = 0;&lt;br /&gt;
&lt;br /&gt;
        foreach (Abgeordneter einAbgeordneter in listeAbgeordnete) {&lt;br /&gt;
            if (einAbgeordneter.gibPartei() == partei) {&lt;br /&gt;
                anzahl = anzahl + 1;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return anzahl;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
Das folgende Beispiel ist in der [[Programmiersprache]] [[Ruby (Programmiersprache)|Ruby]] geschrieben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
# Die Klasse &amp;quot;Fahrzeug&amp;quot; ist die Basisklasse.&lt;br /&gt;
class Fahrzeug&lt;br /&gt;
    def bewegen()&lt;br /&gt;
        puts &amp;quot;Fahrzeug wird bewegt.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# Die Klasse &amp;quot;Auto&amp;quot; ist die abgeleitete Klasse.&lt;br /&gt;
class Auto &amp;lt; Fahrzeug&lt;br /&gt;
    def bewegen()&lt;br /&gt;
        puts &amp;quot;Auto wird bewegt.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
def fahren(fahrzeug)&lt;br /&gt;
    # zur Verdeutlichung der sog. &amp;quot;Polymorphie&amp;quot;&lt;br /&gt;
    fahrzeug.bewegen()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# Hauptprogramm&lt;br /&gt;
fahrzeug = Fahrzeug.new&lt;br /&gt;
auto = Auto.new&lt;br /&gt;
&lt;br /&gt;
fahrzeug.bewegen()&lt;br /&gt;
auto.bewegen()&lt;br /&gt;
&lt;br /&gt;
# Polymorphie: Methode &amp;#039;fahren&amp;#039;&lt;br /&gt;
fahren(fahrzeug)&lt;br /&gt;
fahren(auto)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dieses [[Computerprogramm|Programm]] definiert eine Klasse &amp;lt;code&amp;gt;Fahrzeug&amp;lt;/code&amp;gt; und eine davon abgeleitete Klasse &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die [[Basisklasse]] besitzt eine [[Methode (Programmierung)|Methode]] namens &amp;lt;code&amp;gt;bewegen()&amp;lt;/code&amp;gt;, die den Text „Fahrzeug wird bewegt.“ auf dem Computerbildschirm ausgibt. Die von &amp;lt;code&amp;gt;Fahrzeug&amp;lt;/code&amp;gt; abgeleitete Klasse &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt; hat ebenfalls eine Methode &amp;lt;code&amp;gt;bewegen()&amp;lt;/code&amp;gt; und überschreibt die Methode von &amp;lt;code&amp;gt;Fahrzeug&amp;lt;/code&amp;gt;. Die von ihr erzeugte Ausgabe lautet „Auto wird bewegt.“.&lt;br /&gt;
&lt;br /&gt;
Anschließend folgt die Definition einer eigenständigen Funktion &amp;lt;code&amp;gt;fahren()&amp;lt;/code&amp;gt;, die ein Objekt der Basisklasse als Argument bekommt. Auf diesem Objekt wird die Methode &amp;lt;code&amp;gt;bewegen()&amp;lt;/code&amp;gt; aufgerufen.&lt;br /&gt;
&lt;br /&gt;
Schließlich folgt das Hauptprogramm, das sowohl ein [[Objekt (Programmierung)|Objekt]] der Basisklasse (&amp;lt;code&amp;gt;fahrzeug&amp;lt;/code&amp;gt;), als auch der abgeleiteten Klasse (&amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt;) erzeugt, und auf beide zuerst &amp;lt;code&amp;gt;bewegen()&amp;lt;/code&amp;gt; aufruft und danach mit Hilfe von &amp;lt;code&amp;gt;fahren()&amp;lt;/code&amp;gt; ebenfalls noch einmal &amp;lt;code&amp;gt;bewegen()&amp;lt;/code&amp;gt; für beide Objekte ausführt.&lt;br /&gt;
&lt;br /&gt;
Wird dieses Programm ausgeführt, so erscheint auf dem Bildschirm:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Fahrzeug wird bewegt.&lt;br /&gt;
Auto wird bewegt.&lt;br /&gt;
Fahrzeug wird bewegt.&lt;br /&gt;
Auto wird bewegt.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es ist zu erkennen, dass, obwohl die Funktion &amp;lt;code&amp;gt;fahren()&amp;lt;/code&amp;gt; für ein &amp;lt;code&amp;gt;Fahrzeug&amp;lt;/code&amp;gt; definiert ist, sie auch für ein &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt; funktioniert und die überschriebene [[Methode (Programmierung)|Methode]] aufgerufen wird, d.&amp;amp;nbsp;h., sie funktioniert für [[Objekt (Programmierung)|Objekte]] der Basisklasse sowie für Objekte aller abgeleiteter Klassen. Diese erben die Eigenschaften und „können“ somit auch alles, was die [[Basisklasse]] „kann“. Dieses im&amp;amp;nbsp;Allgemeinen erwünschte Verhalten nennt man [[Polymorphie (Programmierung)|&amp;#039;&amp;#039;Polymorphie&amp;#039;&amp;#039;]].&lt;br /&gt;
&lt;br /&gt;
== Erweiterung ==&lt;br /&gt;
Eine Erweiterung bzw. [[Abstraktion (Informatik)|Abstraktion]] dieses Konzepts findet sich in dem Modell der [[Abstrakte Klasse|abstrakten Klassen]] und der [[Metaklasse]]n.&lt;br /&gt;
&lt;br /&gt;
Möglich ist auch eine sogenannte &amp;#039;&amp;#039;&amp;#039;anonyme Klasse&amp;#039;&amp;#039;&amp;#039;. Dabei wird eine Klasse nur an genau der Stelle beschrieben, an der ein [[Objekt (Programmierung)|Objekt]] von ihr erzeugt wird. Sie ist nicht getrennt (zum Beispiel in einer eigenen Datei) als eigenständige Komponente im [[Quellcode]] beschrieben und kann daher auch von anderen Programmteilen nicht [[Wiederverwendbarkeit|wiederverwendet]] oder gezielt angesprochen werden. Die Klasse erhält auch keinen eigenen Namen. In der Regel erbt sie jedoch von einer anderen, diese beschreibt dann die Haupteigenschaften und -methoden des Objekts für seine spätere Verwendung. Die abgeleitete, namenlose Klasse modifiziert das Verhalten meist nur geringfügig.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel in [[Java (Programmiersprache)|Java]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Button;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
&lt;br /&gt;
// Erzeugen eines Button-Objekts, speichern in hilfeButton&lt;br /&gt;
// &amp;quot;Hilfe&amp;quot; ist die Beschriftung des Buttons&lt;br /&gt;
Button hilfeButton = new Button(&amp;quot;Hilfe&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// Zum Button wird ein Objekt hinzugefügt, das eine Methode &amp;quot;actionPerformed&amp;quot;&lt;br /&gt;
// besitzt. Die Methode wird aufgerufen, wenn der Button angeklickt wird.&lt;br /&gt;
hilfeButton.addActionListener(&lt;br /&gt;
    new ActionListener() {&lt;br /&gt;
        void actionPerformed(ActionEvent e) {&lt;br /&gt;
            System.out.println(&amp;quot;Hilfetext&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    } // end anonymous class&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird mit &amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt; ein [[Objekt (Programmierung)|Objekt]] erzeugt, das in Hauptsache einem &amp;lt;code&amp;gt;java.awt.event.ActionListener&amp;lt;/code&amp;gt; entspricht (zwar keine [[Basisklasse]], aber ein [[Schnittstelle (Objektorientierung)|Interface]]). Als spezielle Verhaltensweise &amp;#039;&amp;#039;genau diesen Objekts&amp;#039;&amp;#039; wird die [[Methode (Programmierung)|Methode]] &amp;lt;code&amp;gt;actionPerformed&amp;lt;/code&amp;gt; so überschrieben, dass sie &amp;lt;code&amp;gt;Hilfetext&amp;lt;/code&amp;gt; auf dem Bildschirm ausgibt. Da ein spezialisiertes Verhalten definiert wurde, ist das Objekt von einer [[Abgeleitete Klasse|abgeleiteten Klasse]], also nicht von &amp;lt;code&amp;gt;ActionListener&amp;lt;/code&amp;gt; direkt – es wurde aber kein Klassenname angegeben. Im nachfolgenden Programm kann das Objekt nur noch als &amp;lt;code&amp;gt;ActionListener&amp;lt;/code&amp;gt; verwendet werden (siehe [[Polymorphie (Programmierung)|Polymorphie]]).&lt;br /&gt;
&lt;br /&gt;
{{Anker|Innere Klasse}}Mitunter wird ähnlich einer anonymen Klasse auch eine &amp;#039;&amp;#039;&amp;#039;innere Klasse&amp;#039;&amp;#039;&amp;#039; definiert. Unterschied zu einer „normalen“ Klasse ist zunächst der [[Sichtbarkeit (Programmierung)|Sichtbarkeitsbereich]], eine innere Klasse ist innerhalb einer anderen („äußeren Klasse“) definiert. Ist sie privat, so können nur Objekte der äußeren Klasse Objekte der inneren erzeugen und verwenden. Ist die innere Klasse nicht-statisch, so ist eine Objekterzeugung sogar abhängig von einem Objekt der äußeren Klasse und nur über ein solches Objekt möglich.&lt;br /&gt;
&lt;br /&gt;
== Reflexion ==&lt;br /&gt;
Manche [[Programmiersprache]]n erlauben es, dass ein [[Computerprogramm|Programm]] die Struktur seiner Klassen kennt und auch das Verändern von Klassen &amp;#039;&amp;#039;zur Laufzeit&amp;#039;&amp;#039;, wie beispielsweise das Ändern der Struktur durch Hinzufügen oder Entfernen von Eigenschaften oder [[Methode (Programmierung)|Methoden]]. Diese sogenannte „[[Reflexion (Programmierung)|Reflexion]]“ sollte nur im Notfall verwendet werden, da das Programm dadurch schwer verständlich und [[Refactoring]] erschwert wird.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Prototypenbasierte Programmierung]] (auch &amp;#039;&amp;#039;klassenlose Objektorientierung&amp;#039;&amp;#039;)&lt;br /&gt;
* [[Klassenbrowser]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Laura Lemay, Rogers Cadenhead: &amp;#039;&amp;#039;Java in 21 Tagen.&amp;#039;&amp;#039; Markt &amp;amp; Technik, Buch- und Software-Verlag, München 2000, ISBN 3-8272-5578-3.&lt;br /&gt;
* Peter Pepper: &amp;#039;&amp;#039;Programmieren lernen. Eine grundlegende Einführung mit Java.&amp;#039;&amp;#039; 3. Auflage. Springer, Berlin u. a. 2007, ISBN 978-3-540-72363-9.&lt;br /&gt;
* Katharina Morik, Volker Klingspor: &amp;#039;&amp;#039;Informatik kompakt: Eine grundlegende Einführung mit Java.&amp;#039;&amp;#039; Springer, Berlin u. a. 2006, ISBN 3-540-24304-6.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wikibooks|Websiteentwicklung: PHP#Objektorientierte Programmierung|Objektorientierte Programmierung (PHP)}}&lt;br /&gt;
* [http://www.highscore.de/cpp/einfuehrung/klassen.html allgemeine Aspekte]&lt;br /&gt;
* [http://www.php-kurs.com/objektorientierte-programmierung-klassen-objekte.htm Abstraktion und Anschauung]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Objektorientierte Programmierung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Itti</name></author>
	</entry>
</feed>