v4.x/Vererbung: Unterschied zwischen den Versionen
Mike (Diskussion | Beiträge) K (→Anregungen zum Experimentieren) |
Mike (Diskussion | Beiträge) K (→Konstruktor-Methode) |
||
Zeile 41: | Zeile 41: | ||
Übersetze deine Klasse und erzeuge ein Objekt davon. Rufe einige Methoden auf, die du von KREIS geerbt hast und versichere dich, dass dein Ball nun alles hat zw. kann, was auch der KREIS hat bzw. kann. Du hast übrigens nicht nur von <code>KREIS</code> geerbt. Da <code>KREIS</code> wiederum von <code>EduActor</code> erbt, verfügt dein Objekt auch dessen Methoden wie z.B. <code>macheDynamisch()</code>. | Übersetze deine Klasse und erzeuge ein Objekt davon. Rufe einige Methoden auf, die du von KREIS geerbt hast und versichere dich, dass dein Ball nun alles hat zw. kann, was auch der KREIS hat bzw. kann. Du hast übrigens nicht nur von <code>KREIS</code> geerbt. Da <code>KREIS</code> wiederum von <code>EduActor</code> erbt, verfügt dein Objekt auch dessen Methoden wie z.B. <code>macheDynamisch()</code>. | ||
− | === Konstruktor-Methode === | + | ==== Konstruktor-Methode ==== |
[[Datei:Boden v1.gif|mini|Ergebnis in BlueJ]] | [[Datei:Boden v1.gif|mini|Ergebnis in BlueJ]] |
Version vom 5. Januar 2020, 22:56 Uhr
Dies ist ein Tutorial für die Edu-Variante der Engine Alpha 4.x. Eine Übersicht aller Edu-Tutorials siehst du hier.
Inhaltsverzeichnis
Inhalt
In diesem Tutorial:
- Lernst du die grundlegende Vererbungs-Hierarchie der Edu-Engine kennen
- Schreibst du deine erste eigene Klasse
Vererbung
Vererbung bedeutet beim Programmieren, man den Code eines anderen übernimmt und in einer "Ergänzungs-Datei" daran weiter arbeitest. Danach kann man auf alle Methoden der Oberklasse(n) zugreifen. Der Sinn ist, dass man z.B. zusätzliche Methoden erstellt oder auf vorgegebene Mechanismen (Mausklick, Tastendruck, ...) mit eigenem Code reagiert. Das nennt man dann überschreiben von Methoden. Man sagt auch, die Unterklasse erweitert die Oberklasse. In JAVA erstellst du eine Unterklasse einer vorgegebenen Oberklasse indem du von dieser erbst.
Vererbungs-Hierarchie der Grafik-Klassen
In der Edu-Engine gibt es bereits vorhandene Vererbung. So sind alle grafisch darstellbaren Klassen Unterklassen der Oberklasse EduActor
.
Vererbung stellt man im Klassendiagramm durch einen Pfeil mit durchgezogener Linie und geschlossener Pfeilspitze dar.
Erste eigene Unterklasse
Erstelle in deiner Entwicklungsumgebung eine neue Klasse Boden
, die von der Klasse KREIS
erbt:
public class Boden
extends KREIS
{
}
Mit public class
erstellst du ganz allgemein eine neue Klasse. Nach einem Leerzeichen folgt der Name der Klasse, den du frei wählen kannst.
extends
gibt an, dass diese Klasse von einer anderen Klasse (Oberklasse) erben soll. Nach einem Leerzeichen folgt der Exakte Name der Oberklasse. Hier ist Groß- und Kleinschreibung wichtig!
Innerhalb der geschweiften Klammern wirst du später deinen eigenen Code unterbringen.
Übersetze deine Klasse und erzeuge ein Objekt davon. Rufe einige Methoden auf, die du von KREIS geerbt hast und versichere dich, dass dein Ball nun alles hat zw. kann, was auch der KREIS hat bzw. kann. Du hast übrigens nicht nur von KREIS
geerbt. Da KREIS
wiederum von EduActor
erbt, verfügt dein Objekt auch dessen Methoden wie z.B. macheDynamisch()
.
Konstruktor-Methode
Der Konstruktor einer Klasse ist eine Methode, die später die Objekte erzeugt. Du kennst die Konstruktoren bon RECHTECK
und KREIS
bereits. Du hast damit im vorigen Tutorial die Objekte erzeugt. In BlueJ hast du dazu mit rechts auf die Klassenkarte geklickt und z.B. new Ball()
oder new KREIS()
aufgerufen.
Bei deiner Klasse Boden
hast du gerade einen Konstruktor benutzt, ohne einen geschrieben zu haben. BLueJ hat hier für dich stillschweigend den geerbten Konstruktor aufgerufen. In deinem eigenen Konstruktor kannst du aber selbst entscheiden, wie neue Objekte aussehen:
public class Boden
extends RECHTECK
{
public Boden()
{
super();
super.setzeGroesse(20,0.5);
super.setzeMittelpunkt(0,-8);
super.setzeReibung(0.2);
super.macheStatisch();
}
}
Mit public Boden()
erstellst du einen Konstruktor, der keine Parameter entgegen nimmt. Der Konstruktor muss immer genau so heißen wie die Klasse. Als Methode bekommt er jedoch runde Klammern. In seinem Rumpf richtest du dein Objekt so ein, wie du es haben möchtest, wenn es neu erzeugt wird.
super()
bewirkt, dass der geerbte Konstruktor erst einmal all das tut, was du kennst: Ein kleines rotes Rechteck oben rechts im Fenster.
Danach wird die Größe angepasst, der Mittelpunkt gesetzt, die Reibung eingestellt und der Boden statisch gemacht.
Übersetze deine Klasse und erzeuge ein Objekt davon. Funktioniert alles?
Konstruktor mit Parametern
Du kennst von den Klassen KREIS
und RECHTECK
bereits Konstruktoren mit Parametern: new KREIS(double radius)
oder new RECHTECK(double breite,double hoehe)
. Solche Konstruktoren sollst du nun in deiner Klasse erstellen:
public class Boden
extends RECHTECK
{
public Boden()
{
. . .
}
public Boden(String anfangsFarbe)
{
super(20,0.5);
super.setzeFarbe(anfangsFarbe);
super.macheStatisch();
}
public Boden(double x, double y)
{
super(20,0.5);
super.setzeMittelpunkt(x,y);
super.macheStatisch();
}
}
Mit public Boden(String anfangsFarbe)
erstellst du einen neuen Konstruktor, der einen Text als Parameter entgegen nimmt. Dem Parameter anfangsFarbe
übergibst du später den gewünschten Farbnamen.
Diesmal wird gleich der geerbte Konstruktor von RECHTECK
aufgerufen, dem man Breit und Höhe übergeben kann. Das verkürzt den eigenen Code.
Die geerbte Methode setzeFarbe(...)
wird nun aufgerufen und ihr der Parameter des Konstruktors übergeben. Beachte, dass anfangsFarbe
hier nicht in Anführungszeichen steht, da es ja nur eine Variable (immer ohne Anführungszeichen) und kein konkreter Farbname (immer mit Anführungszeichen) ist.
Der Dritte Konstruktor public Boden(double x, double y)
nimmt dann zwei Kommazahlen als künftige Koordinaten entgegen.
Die Parameter x
und y
werden nun in der Methode setzeMittelpunkt(...)
eingesetzt.
Anregungen zum Experimentieren
- Schreibe eine Unterklasse von KREIS und nenne sie Ball. Ein neuer Ball soll den Radius 1 haben, eine Elastizität von 0.7, einen Reibungskoeffizienten von 0.3. Er soll bei den Koordinaten (0|8) erscheinen und dynamisch sein. Übersetze deine Klasse und erzeuge ein Objekt davon. Funktioniert alles?
- Schreibe einen zweiten Konstruktor, der die Farbe des Balls entgegen nimmt. Übersetze deine Klasse und teste diesen Konstruktor.
- Schreibe einen dritten Konstruktor, der die Mittelpunkt-Koordinaten entgegen nimmt. Übersetze deine Klasse und teste diesen Konstruktor.