2010-12-20 12 views
0
Person studentA = new Student(); 

Person ist eine Basisklasse Student ist eine Unterklasse von Person.Vererbung Polymorphismus Frage

Warum sollte jemand die oben genannte Codezeile verwenden? Warum machst du nicht einfach

Student studentA = new Student(); 

Antwort

2

Manchmal möchten Sie sich auf ein Objekt in einem allgemeineren Sinne beziehen. Die meisten Leute verstehen Benutzerschnittstellen, so ist hier ein grundlegendes Beispiel:

Angenommen, Sie haben einen Bildschirm, wo jedes Steuerelement deaktiviert werden soll, bis eine Art von Cue, dh. Ein Benutzer füllt eine erste Eingabe aus. Ihre Steuerelemente können Dinge wie Textfelder, Comboboxen (Dropdown) oder Schaltflächen sein. Ein Weg, auf den Sie sich auf einen Schlag beziehen können, ist, sie als Kontrollen zu behandeln.

Sie können Code schreiben wie:

foreach(Control c in MyForm.Controls)c.Enabled = false; 

Dieses Beispiel ist aber, wie Sie die Programmierung mehr starten werden Sie sehen, das ein ziemlich grundlegender Teil der objektorientierten Existenz.

Eine Stelle, an der Sie die meisten objektorientierten Basisklassenbibliotheken finden können, ist diese Technik mit I/O - alle verfügbaren Eingabe- und Ausgabebibliotheken. Im abstraktesten Sinne haben Sie einen Stream, aber wenn Sie sich die Klassenhierarchie ansehen, werden Sie polymorphe Variationen des Stream-Konzepts sehen: einen Datei-Stream, einen Netzwerk-Stream und so weiter. Das Lesen und Schreiben von Stream-Implementierungen erfolgt mit "Readers" bzw. "Writers". Wenn Sie einige grundlegende Programmieraufgaben ausführen, erhalten Sie ein sehr gutes Gefühl dafür, wie nützlich dieser Polymorphismus ist. Beispiel: Schreiben von Code, der aus einem Stream liest und ihn abstrahiert, sodass er auf jede Implementierung von Stream angewendet werden kann, der übergeben wird. Eine Sache, die ich immer den Leuten vorschlagen möchte, ist, die eingebauten Bibliotheken zu studieren, um zu sehen, wie Framework-Designer und Programmierer Techniken wie diese für eine sehr praktische alltägliche Verwendung einsetzen.

+0

Also verallgemeinert es es einfach, so dass ich, wenn ich mit allen Objekten (einschließlich aller Unterklassen) sprechen muss, sie alle als Basisklasse behandeln und alle behandeln kann. Ich denke, das ist, was ich von deinem Beispiel bekomme. – RoR

+0

Das stimmt. Bezug auf alle "Mitarbeiter", obwohl sie "Auftragnehmer" oder "Temp" oder "Vollzeit" und so weiter sind. Es passiert viel. – t3rse

0

Das würdest du wirklich nie tun. Aber was wäre, wenn Sie einen Vektor der Person hätten und angeben möchten, dass einige der Personen, die Sie hinzufügen, Studenten sind?

Sie sollten wahrscheinlich über Vererbung und Polymorphie nachlesen. Ihre Frage zeigt, dass Sie wirklich nicht viel Erfahrung mit Programmierung hatten.

Dies ist der erste Link, den ich von Google gezogen habe. http://msdn.microsoft.com/en-us/library/27db6csx%28v=vs.80%29.aspx

+0

Das Poster oben sagte: "Dies ist ein Beispiel, aber wenn Sie anfangen zu programmieren, werden Sie sehen, das ist ein ziemlich grundlegender Teil Ihrer objektorientierten Existenz." - Obwohl Sie sagten: "Das würden Sie wirklich nie tun." Wer hat Recht? Und ja, ich bin neu im Programmieren. Ich versuche diese Konzepte zu verstehen. – RoR