Sinn der Klassenvererbungen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Macoun 2019 - Frühbucherrabatt endet morgen

  • Sinn der Klassenvererbungen

    Hallo,

    und wieder ein Anfänger mit einer Frage zu Klassen. Sorry!

    In meinem Beispiel habe ich eine Super- und ein Subklasse angelegt. In der Superklasse habe ich Properties wie den Vor-, Nachnamen oder auch das Alter. Folgend erstelle ich mit 'Student' eine Subklasse von 'nameDerKlasse'. Und darin führe ich zwei Properties auf, die ich jetzt mal eher einem Studenten zuordne: Die Matrikelnummer und das Fach.

    Aber: Wenn ich in der Subklasse die Initialisierung durchführe, warum muss ich dann bereits im Aufruf die Properties der Superklasse an den Initializer der Subklasse übergeben, um sie dann anschließend mit dem 'super.init' Statement noch ein weiteres Mal aufzuführen.

    Ich weiß zwar nun dass man das so macht. Aber ich würde gerne verstehen warum das so ist. Denn mir erschließt sich der Sinn dieser Vererbung nicht. Ändere ich etwas in der Superklasse, passt es doch auch schon nicht mehr in der Subklasse. Was hat das also mit "Vererbung" zu tun? Und da ich die Subklasse ja wie ihre Superklasse auch einzeln instanziere, kann ich doch direkt auch eine neue Superklasse erstellen. Oder?!

    Ich habe keine Praxiserfahrung, vielleicht stellt sich diese Frage dann nicht. Aber mir fällt als Einsteiger einfach kein Grund ein, warum ich mir solche Strukturen schaffen sollte, die ich akribisch überwachen muss.

    Bin für Hilfe sehr dankbar! Vielleicht begreife ich´s dann.

    Quellcode

    1. class nameDerKlasse{
    2. var vorname: String
    3. var nachname: String
    4. var alter: Int
    5. init(vorname: String, nachname: String, alter: Int) {
    6. self.vorname = vorname
    7. self.nachname = nachname
    8. self.alter = alter
    9. }
    10. }
    11. class Student: nameDerKlasse{
    12. var matrikel: Int
    13. var fach: String
    14. init(matrikel: Int, fach: String, vorname: String, nachname: String, alter: Int) {
    15. self.matrikel = matrikel
    16. self.fach = fach
    17. super.init(vorname: vorname, nachname: nachname, alter: alter)
    18. }
    19. }
    Alles anzeigen
  • Mac & i Test Abo
  • swifter84 schrieb:

    Aber: Wenn ich in der Subklasse die Initialisierung durchführe, warum muss ich dann bereits im Aufruf die Properties der Superklasse an den Initializer der Subklasse übergeben, um sie dann anschließend mit dem 'super.init' Statement noch ein weiteres Mal aufzuführen.
    Du führst in Zeile 16 keine "Initialisierung der Subklasse" durch, sondern Du definierst nur die Methode, die bei einer Initialisierung genutzt werden soll (den "Initializer"). Wenn man also eine Instanz der Klasse Student erzeugen möchte, muss man alle fünf Properties als Parameter angeben:

    Student.init(martikel, fach, vorname, name, alter)

    Und die drei letzten werden (unverändert) an den designated initializer der Superklasse weitergereicht. Da sie auch von diesem abgefragt werden können, besteht nicht die Notwendigkeit, sie in der Subklasse als Property zu speichern (ich würde es aber der Übersichtlichkeit halber tun).

    Und das ganze muss nicht so sein: Manchmal ermitteln Initializer einer Subklasse Properties der Superklasse auch intern oder nutzen z. B. Konstanten. Das hängt vom konkreten Anwendungsfall ab.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.