bobcat22
Goto Top

Grundsatzfrage zur Objektorienteirung

Guten Abend,

ich fange gerade erst an mich mit Programmierung und vor allem OOP zu befassen und habe eine ganz grundlegende Tatsache davon noch nicht verstanden ( Weiß nicht mal wie ich danach googlen soll).

Wenn Klasse A quasi als Datenkontainer oder Zähler fungiert mit Variablen oder Arrays zum Beispiel

public class KlasseA {
public int ergebniss = 4
}

Klasse B addiert nach jedem schleifendurchlauf auf die public Variable in Klasse A etwas drauf.

public class KlasseB {
KlasseA klassA = new KlasseA();
for (int i = 0; i == 10; i++) {
klassA.ergebniss = ergebniss + 1;
}
}

wieso kann ich den Wert dann in der Main dann nicht, bzw nur im ursprünglichen nicht erhöhten wert ausgeben lassen

public class C {
public static void main (String args) {
KlasseB klassB = new KlasseB()
System.out.println(klassB.ergebniss);
}
}


Ich kann mir vorstellen das in diesem Beispiel (entschuldigt übrigens den pseudo Code) Klasse B und Klasse C jeweils eine eigene Instanz von Klasse A haben und deswegen die Werte in den unterschiedlichen Instanzen verschieden sind. Ist das richtig? wenigstens annähernd?

Falls ja wie greife ich dann auf die richtige Instanz zu?


Vielen danke im Voraus und allen eine erfolgreiche Woche

bob

Content-Key: 294797

Url: https://administrator.de/contentid/294797

Printed on: April 26, 2024 at 07:04 o'clock

Member: aqui
aqui Jan 31, 2016 at 19:29:30 (UTC)
Goto Top
Für solche Fauxpas in den Überschriften gibt es übrigens den "Bearbeiten" Button face-wink
Member: AndreasHoster
AndreasHoster Jan 31, 2016 at 20:31:02 (UTC)
Goto Top
Auf Syntax Fehler in diesem Pseudo-Code wohlen wir gar nicht erst eingehen ...
Punkt 1:
klassA.ergebniss = ergebniss + 1;
klassA.ergebniss und ergebniss sind 2 verschiedene Variablen. Du addierst also nicht auf.
Punkt 2:
System.out.println(klassB.ergebniss);
klassB hat kein Attribut ergebniss, also kann das eigentlich nichts ausgeben. Du wolltest sicherlich ergebniss der in KlasseB enthaltenen KlasseA also:
System.out.println(klassB.klassA.ergebniss);

Und es ist nicht sinnvoll KlasseA und klassA als Namen zu nehmen, ist zu ähnlich und zu verwechselbar.
Member: LordXearo
LordXearo Feb 01, 2016 updated at 08:36:46 (UTC)
Goto Top
Und um mal auf die eigentliche Frage zurück zu kommen....

Du musst die Objekte zwischen der Klassen übergeben, damit du an die Werte dran kommst.

Jedes
KlassA myKlassA = new KlassA(); 
erzeugt nämlich ein neues Objekt welches in keiner Verbindung zu anderen Objekten steht (ausser den Vater-Klassen).
Mitglied: 117471
117471 Feb 01, 2016 at 17:46:56 (UTC)
Goto Top
Was spricht dagegen,
- die Klasse um eine Prozedur anzureichern, die den klasseninternen Wert um 1 erhöht?
- die Klasse um eine Funktion anzureichern, die den klasseninternen Wert ausgibt?