Ok, ich habe das ganze Semester über Java studiert und dachte, ich hätte ein klares Verständnis von Vererbung und Super / Sub-Klassen. Heute wurden wir beauftragt, eine Superklasse namens "Feind" zu bilden, mit Unterklassen verschiedener Arten von Feinden. Ich habe alles gut gemacht und alle meine Unterklassen arbeiten, aber als ich zurückging, um die Richtlinien zu lesen, denen wir folgen müssen, fand ich diesen Satz:
"Alle Membervariablen der Superklasse müssen privat sein. Jeder Zugriff auf eine Variable muss über geschützte Methoden in den Unterklassen erfolgen."
Nach dem, was ich gelernt habe, ergibt das für mich keinen Sinn. Wenn eine Variable in der Oberklasse privat ist, verbietet das nicht den Zugriff auch von einer Unterklasse? Der letzte Teil, der über geschützte Methoden in den Unterklassen spricht, macht auch keinen Sinn für mich. Wie hilft dies und / oder erlaubt irgendeinen Zugang zu der Superklasse?
Nach dem, was ich über Vererbung gelernt habe, ist Unten, was ich dachte, war wahr:
%Vor%Wenn ich hier etwas falsch verstehe, bitte erkläre es! Ich möchte den Lehrer nicht damit konfrontieren, uns falsche Anweisungen zu geben, wenn ich derjenige bin, der es nicht richtig versteht!
Der Teil
%Vor%... bedeutet nur, dass die Unterklassen geschützte Methoden aufrufen müssen, die in der Oberklasse definiert sind. Da diese Methoden geschützt sind, können sie von den Unterklassen aufgerufen werden.
Zuerst würden Sie eine Basisklasse wie folgt definieren:
%Vor%Dann würden Sie es in Ihrer Kindklasse wie folgt verwenden:
%Vor% Wahrscheinlich ist der Satz nicht richtig formuliert, aus dem, was ich verstehe, ergibt das für mich vollkommen Sinn:
1. Die Superklasse hat private Felder und geschützte Methoden, um auf sie zuzugreifen
2. Die Unterklassen greifen mit diesen Methoden auf die Felder zu.
Das sind nur die Einschränkungen der Zuweisung, nicht Java selbst. Sie könnten der Superklasse geschützte Datenelemente zuweisen und dann direkt auf diese aus der Unterklasse zugreifen. Allerdings möchte der Professor Ihnen wahrscheinlich beibringen, wie eine Oberklasse ihre Datenmitglieder vor direktem Zugriff durch eine Unterklasse schützen kann, und geschützte Methoden wären eine Möglichkeit, dies zu tun.
Wenn Sie eine andere Klasse vererben, können Sie nicht direkt auf Ihre privaten Attribute zugreifen. Also, wenn Sie eine Klasse namens "A" und andere namens "B" haben, und machen B erweitert A, B kann nicht auf private Attribute von A zugreifen.
Denken Sie das wie ein Schutz. Auf diese Weise können Sie einige Attribute in Klasse "A" schreiben, die nicht möchten, dass andere Klassen durch Vererbung darauf zugreifen.
Die Klasse "B" kann nur auf öffentliche, geschützte und Standardattribute direkt in der Klasse "A" zugreifen. Wenn Sie jedoch aus irgendwelchen Gründen auf ein privates Attribut in der Klasse "A" zugreifen möchten, können Sie eine Methode in "A" schreiben, um dieses Attribut zurückzugeben.
%Vor%Du hast recht, wenn du denkst, dass du buchstäblich nicht auf das private Feld einer Superklasse zugreifen kannst. Der Text Ihrer Aufgabe verwendet eine Formulierung, die nicht 100% ig strikt ist, aber im Java-Jargon 100% üblich ist: Die sogenannten "Getter" -Methoden, auch "Accessor" -Methoden genannt, gelten dennoch als "Zugriff auf das Feld" Streng genommen geben sie nur den aktuellen Wert des Feldes zurück - was definitiv nicht dasselbe ist wie der Zugriff auf das Feld selbst. Sie müssen sich nur an diese (und viele weitere) Konventionen im Java-Jargon gewöhnen.
Tags und Links java inheritance