Entwickler-Ecke
C# - Die Sprache - Methode überschreiben, Polymorphismus
Ritzeratze - So 26.01.14 14:29
Titel: Methode überschreiben, Polymorphismus
Moin,
und wieder mal ein Verständnisproblem.
Ich habe ein Quelltextfragment:
Es wird ein Array für Instanzen der Klasse Pferd erzeugt und ruft für jedes Element im Array die Ausgeben Methode auf.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| Pferd[] Pferdeliste = new Pferd[2]; Pferdeliste[0] = new Pferd (200,3); Pferdeliste[1] = new ElternPferd (700,2,40);
foreach (Pferd testPferd in Pferdeliste) testPferd.Ausgeben(); |
Die Klasse ElternPferd ist von der Klasse Pferd abgeleitet und verfügt über eine eigenen Methode Ausgeben, die die Ausgeben Methode der Basisklasse überschreiben soll.
Die Ausgeben Methode der abgeleiteten Klasse ist aber nicht mit override markiert.
Ab jetzt bin ich unsicher, ob ich die Basisklasse tatsächlich so überschreiben kann?
Soweit ich das verstanden habe, kann ich diese nur überschreiben, wenn ich sie mit override oder virtual kennzeichne.
Wie würden denn die vollständigen Namen der Methoden heißen, die ich in der Schleife aufrufe (Also Klassenname.Methode)?
Gruss Ritze der gerne C# lernen möchte.
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Th69 - So 26.01.14 15:13
Hallo,
solange die Basismethode nicht mit virtual deklariert ist, so wird bei einem Aufruf dieser Methode immer auch nur exakt diese Methode aufgerufen.
Du mußt bei Objekten zwischen dem statischen und dynamischen Typ unterscheiden: in deinem Fall ist Pferd der statische Typ der beiden Objekte in dem Array, während die beiden dynamischen (d.h. wirklich zur Laufzeit vorliegenden) Typen Pferd sowie ElternPferd sind (wobei der Name hier jetzt unglücklich gewählt ist, denn normalerweise erbt ein Kind ja von seinen Eltern - nicht andersherum!).
Es wird also in deinem Code innerhalb der Schleife in beiden Fällen die Pferd.Ausgeben()-Methode aufgerufen.
Daher macht (öffentliche) Vererbung auch nur Sinn, wenn mindestens eine Methode (der Basisklasse) als virtual deklariert ist, damit abgeleitete Klassen diese Methoden mittels override überschreiben können.
P.S: In C# muß man bei abgeleiteten Klassen explizit override benutzen, dies ist aber nicht bei allen objektorientierten Sprachen so (z.B. in C++, wo man dann sogar nur das Schlüsselwort virtual optional angeben kann).
Ritzeratze - So 26.01.14 21:37
Hi Th69,
ich glaube ich brauch jetzt ne Flasche Rotwein. Bin gerade an einem Punkt, wo ich nicht mehr mitkomme.
Werde das ganze nochmal sacken lassen und mich dann noch einmal mit Vererbung auseinandersetzen.
Gibt es eigentlich irgendwo auf dieser Welt ein einfaches Tutorial, mit dem man Vererbung gründlich lernen kann?
Danke aber für Deine hilfreichen Worte, die mir es zumindest etwas verständlicher darstellen konnten.
Gruss Ritze
Ritzeratze - Mo 03.02.14 00:52
Danke für die Infos
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!