Name der Parent Klasse abfragen

prototype0815

Aktives Mitglied
Hallo Leute,

ich habe mal eine etwas spezielle frage die ich nach einer Stunde recherche nicht lösen kann, und dringend brauche.

Ich habe 3 Klassen (A, B, C)

Ich befinde mich in Klasse A und erstelle ein Objekt der Klasse C
Ich befinde mich nun in Klasse B und erstelle ebenfalls ein Objekt der Klasse C


Nun befinde ich mich in Klasse C und programmiere meinen Code. Nun sollte ich wissen ob dieses Objekt von Klasse A oder Klasse B erstellt wurde, weil mein Programm anders reagieren soll.
Bsp.
Java:
if(parentKlasse == A) {
mach was;
}
else if(parentKlasse == B) {
mach was anderes;
}

wie kann ich nun abfragen wer in dieser Situation meine "erstellende" Klasse war?

LG proto
 

Joose

Top Contributor
Ich habe 3 Klassen (A, B, C)

Ich befinde mich in Klasse A und erstelle ein Objekt der Klasse C
Ich befinde mich nun in Klasse B und erstelle ebenfalls ein Objekt der Klasse C

Nun befinde ich mich in Klasse C und programmiere meinen Code. Nun sollte ich wissen ob dieses Objekt von Klasse A oder Klasse B erstellt wurde, weil mein Programm anders reagieren soll.
Bsp.
Java:
if(parentKlasse == A) {
mach was;
}
else if(parentKlasse == B) {
mach was anderes;
}

Das hört sich so eigenartig an wie es auch ausschaut. Theoretisch könntest du den Konstruktor den Typ der erstellenden Klasse mitgeben (Klasse Class).


Einfacher wäre es wenn du ein Klasse Ca erstellst und Klasse A erstellt eben ein Objekt von Ca (analog dazu Cb, B erstellt ein Objekt von Cb). Wenn du bei Ca und Cb gemeinsamkeiten hat dann leite doch beide von einer Superklasse C ab.

Java:
public abstract class C {
}

public class CA extends C {
}

public class CB extends C {
}

public class A {
 private CA obj;
 public A() {
  obj = new CA();
 }
}

public class B {
 private CB obj;
 public B() {
  obj = new CB();
 }
}
 
Zuletzt bearbeitet:

prototype0815

Aktives Mitglied
da mir wirklich nichts besseres eingefallen ist habe ich es nun so gelöst...

ich habe in Klasse C, 2 Konstruktoren gebaut und mit Übergabeparametern gearbeitet.

Java:
public class KlasseC extends JPanel {


	public KlasseC() {
		this(-1);
	}
	
	public KlasseC(int Index) {
		
		if(index == -1) {
			mach das...
		}
		else {
			mach was anderes...
		}
	}


}

wird ein Objekt der Klasse "KlasseC" erstellt ohne Übergabeparameter, wird intern automatisch der zweite Konstruktor aufgerufen mit dem Übergabeparameter -1 .

wird ein Objekt der Klasse "KlasseC" erstellt mit Übergabeparameter, dann wird gleich der zweite Konstruktor angesprochen.

Und je nachdem wie das Objekt erstellt wird, mit oder ohne Übergabeparameter, wird ein anderer Konstruktor und somit auch anderer Code ausgeführt. und ich habe innerhalb der Klasse "KlasseC" nur minimale Änderungen.
 

kaoZ

Top Contributor
getClass(); liefert dir den den laufzeittyp der Klasse

prüfen kannst du sowas z.B mit

Java:
if(this instanceof B){
  // do something
}

jetzt mal nur rein als fiktives beispiel..

Ansonsten kannst du sowas über Reflections ermöglichen, wenn die Superklasse dir unbekannt ist.
 
Zuletzt bearbeitet:

Natac

Bekanntes Mitglied
da mir wirklich nichts besseres eingefallen ist habe ich es nun so gelöst...

ich habe in Klasse C, 2 Konstruktoren gebaut und mit Übergabeparametern gearbeitet.

Java:
public class KlasseC extends JPanel {


	public KlasseC() {
		this(-1);
	}
	
	public KlasseC(int Index) {
		
		if(index == -1) {
			mach das...
		}
		else {
			mach was anderes...
		}
	}


}

wird ein Objekt der Klasse "KlasseC" erstellt ohne Übergabeparameter, wird intern automatisch der zweite Konstruktor aufgerufen mit dem Übergabeparameter -1 .

wird ein Objekt der Klasse "KlasseC" erstellt mit Übergabeparameter, dann wird gleich der zweite Konstruktor angesprochen.

Und je nachdem wie das Objekt erstellt wird, mit oder ohne Übergabeparameter, wird ein anderer Konstruktor und somit auch anderer Code ausgeführt. und ich habe innerhalb der Klasse "KlasseC" nur minimale Änderungen.
Ich denke du programmiert da ein wenig an der Idee von OOP vorbei. Eine Klasse sollte EIN Verhalten haben. Wenn du unterschiedliches Verhalten benötigst, dann mach eine zweite Klasse, die von der ersten erbt (oder die beide von einer Superklasse erben, wie Joose es beschrieben hat).

Denn die -1 ist dann einfach nur ne Magic-Number. Was passiert bei 0, -5 oder 4711? (Schon klar das du weißt was dann passiert, aber ich denke ein int (das auch noch so einen nichtssagenden namen wie "flag" trägt) wird die oder anderen in Zukunft nicht helfen deinen Code (wieder) zu verstehen.

Wenn schon per Übergabewert im Konstruktor, dann nimm ein boolean und gib den Parameter einen namen, der aussagt was mit diesem boolean gesteuert wird.

Aber so schreibst du einfach nur kryptischen Code, den aus dir keiner lesen kann. Und du selbst in 2 Monaten auch nicht mehr.
 

prototype0815

Aktives Mitglied
da hast du natürlich recht, boolean wäre schon toller aber ich brauche den int Index weil der sich ja natürlich auch ändert. Normalerweise ist die Klasse so gestaltet das sie Daten von einem Shared-Memory eines Echtzeitprogramms abfragt, ich musste sie nun so umbauen das sie Daten von wo anders bezieht und dafür brauche ich einen History-Index, aber das nur wenn sie als Objekt unterhalb der History Klasse eingebaut wird.

und das war das knifflige dabei... Natürlich hätte ich nun ganz schön eine Klasse erstellen und von dieser erben können, aber mMn. mehr arbeit.

Und die Klasse einfach zu kopieren und als Zweitklasse etwas umzubauen ist zwar wenig arbeit aber dafür gibts gleich mal ´n paar tausend Zeilen mehr Code. Ich musste nämlich 7 Klassen so umbauen, und die bestehen locker mal aus 500-1000 Zeilen Code.
 

Natac

Bekanntes Mitglied
da hast du natürlich recht, boolean wäre schon toller aber ich brauche den int Index weil der sich ja natürlich auch ändert. Normalerweise ist die Klasse so gestaltet das sie Daten von einem Shared-Memory eines Echtzeitprogramms abfragt, ich musste sie nun so umbauen das sie Daten von wo anders bezieht und dafür brauche ich einen History-Index, aber das nur wenn sie als Objekt unterhalb der History Klasse eingebaut wird.

und das war das knifflige dabei... Natürlich hätte ich nun ganz schön eine Klasse erstellen und von dieser erben können, aber mMn. mehr arbeit.

Und die Klasse einfach zu kopieren und als Zweitklasse etwas umzubauen ist zwar wenig arbeit aber dafür gibts gleich mal ´n paar tausend Zeilen mehr Code. Ich musste nämlich 7 Klassen so umbauen, und die bestehen locker mal aus 500-1000 Zeilen Code.
Das heißt deine Klasse hat eine Methode loadData(), die die Daten lädt.

Was spricht jetzt dagegen eine Klasse
Code:
KlasseHistoryC
wie folgt zu erzeugen:

Java:
public class KlasseHistoryC extends KlasseC{
  private int historyIndex;

  public KlasseHistoryC(int historyIndex){
    this.historyIndex = historyIndex;
  }

  public void loadData(){// overrides loadData in KlasseC
    // load data using history index
  }
}
Das sieht mir nicht nach viel Arbeit aus. Im Gegenteil. Du lässt alles gleich und ändert nur die Methode, die sich anders verhalten soll. Und alle Instanzen dieser Klasse kannst du ohne Probleme als KlasseC-Instanzen verkaufen.

Ich glaube dein Fehler besteht vielmehr darin, dass du die Daten bereits im Konstruktor laden willst. Das laden von Daten sollte man eher extern über eine init/load/whatever-Methode und nicht im Konstruktior machen. Eben weil es dann schwierig werden kann, solche Klassen zu erweitern.

Und solltest du jetzt auf die glorreiche Idee kommen diese Methode einfach aus dem Superkonstruktor aufzurufen, dann sei gewarnt: Alle Attribute der Subklasse sind zu diesem Zeitpunkt noch nicht gesetzt.
 
Zuletzt bearbeitet:

prototype0815

Aktives Mitglied
...Natürlich hätte ich nun ganz schön eine Klasse erstellen und von dieser erben können, aber mMn. mehr arbeit...

:bahnhof: hab ich doch gesagt...

...Ich glaube dein Fehler besteht vielmehr darin, dass du die Daten bereits im Konstruktor laden willst. Das laden von Daten sollte man eher extern über eine init/load/whatever-Methode und nicht im Konstruktior machen. Eben weil es dann schwierig werden kann, solche Klassen zu erweitern.

Und solltest du jetzt auf die glorreiche Idee kommen diese Methode einfach aus dem Superkonstruktor aufzurufen, dann sei gewarnt: Alle Attribute der Subklasse sind zu diesem Zeitpunkt noch nicht gesetzt.

Ah ok, schon wieder was gelernt :toll: Danke !
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Name des aktuellen Programms Allgemeine Java-Themen 7
L Ist ein string ein erlaubter variabel name? Allgemeine Java-Themen 2
S Variable als Objekt Name Allgemeine Java-Themen 3
J Apache POI - No external workbook with name Allgemeine Java-Themen 5
Neumi5694 Task-Name unter Windows Allgemeine Java-Themen 4
1 Name Generator für Videos Allgemeine Java-Themen 1
E Webservice zur Konvertierung IBAN/BIC -> Bank Name Allgemeine Java-Themen 1
D Name eines Nicht-String Objekts ausgeben Allgemeine Java-Themen 4
S Name einer Musikdatei auslesen und ändern Allgemeine Java-Themen 8
J IMDB Name und Bewertung auslesen Allgemeine Java-Themen 10
J .txt erstellen, nach name der vorhergehenden txt Allgemeine Java-Themen 7
J Suche: Tool zum Auffinden gleichnamiger Klassen (Name und Package gleich) in unteschiedlichen JARs Allgemeine Java-Themen 5
P ActionListener / Label Name auslesen Allgemeine Java-Themen 2
S java -jar name.war. Wie Extraktionspfad umbiegen? Allgemeine Java-Themen 2
S [JUnit] Name von TestCase bekommen Allgemeine Java-Themen 4
D Passende Name für Methoden finden Allgemeine Java-Themen 3
Dit_ Registry, Preferences | Name des Knotens ändern. Allgemeine Java-Themen 2
E String name in class convertieren Allgemeine Java-Themen 4
E Variablen anderer Klassen auslesen (nur Name bekannt) Allgemeine Java-Themen 4
S Konstrukt Sinn, Zewck und Name Allgemeine Java-Themen 6
Ark Name für Funktion gesucht Allgemeine Java-Themen 5
D variabler Listen name Allgemeine Java-Themen 3
M Name der Swing Komponente Allgemeine Java-Themen 3
C Name einlesen und Programm starten Allgemeine Java-Themen 2
S "Guessed User name" bei Tomcat belegen Allgemeine Java-Themen 2
J Name eines Strings durch einen String festlegbar? Allgemeine Java-Themen 2
M Name von Wochentagen vergleichen Allgemeine Java-Themen 3
M Zugriff auf Objekt, Name in Variable Allgemeine Java-Themen 3
F Welcher Name? paintsXY(), isPaintXY(), isPaintingXY() . Allgemeine Java-Themen 4
V Objekt einer Klasse, deren Name nur als String vorhanden Allgemeine Java-Themen 4
D Name der Java-Applikation Allgemeine Java-Themen 2
A Class File zur Laufzeit laden ohne den Binary Name zu kennen Allgemeine Java-Themen 11
G jar-Name einer Klasse Allgemeine Java-Themen 9
O String übergeben ist name eines JTextField wie zugreifen Allgemeine Java-Themen 9
S Name der ausführenden jar-Datei abfragen Allgemeine Java-Themen 11
Y fehler: wrong name serverA Allgemeine Java-Themen 3
F Parameter Name herausfinden Allgemeine Java-Themen 25
H Package name aus Class-File auslesen Allgemeine Java-Themen 11
P Duplicate name in Manifest Allgemeine Java-Themen 6
J Name des aktuell aktiven Windows-Fensters abfragen? Allgemeine Java-Themen 4
T JUSB - Name des USB Endgerätes zurückgeben Allgemeine Java-Themen 2
L Systeminformationen (PC-Name und Kennwort) auslesen Allgemeine Java-Themen 9
B Name eines komischen Klassenkonstruktes Allgemeine Java-Themen 14
S Sortierung einer Collection nach dem Attribut "name&quo Allgemeine Java-Themen 3
M Event Handling Vom ActionEvent zum Parent-Namen Allgemeine Java-Themen 11
P Designproblem bei Parent/Children-Beziehungen von Klassen Allgemeine Java-Themen 6
M aus einer Unterklasse auf den parent zugreifen Allgemeine Java-Themen 2
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
A Zweite Service Klasse beim Kompilieren Allgemeine Java-Themen 6
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
Atten007 Java-Klasse auf macOS entpacken? Allgemeine Java-Themen 2
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
missy72 Klassen Eigene Klasse MessageWindow ähnlich der Alert Klasse Allgemeine Java-Themen 2
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
kanywayne Java programmieren: Polynom Klasse Allgemeine Java-Themen 4
L Die abzuleitende Klasse als Parameter übergeben Allgemeine Java-Themen 4
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
C Klasse mit Mockito simulieren Allgemeine Java-Themen 9
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Thallius Key/Value Table in Klasse einlesen Allgemeine Java-Themen 14
S static in Interface und Klasse Allgemeine Java-Themen 2
W Was genau sind IOTools? Kann ich stattdessen nicht die Scanner Klasse verwenden? Allgemeine Java-Themen 3
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
D javassist API Klasse in MethodCall ermitteln Allgemeine Java-Themen 8
kodela Klasse mit "gezipten" Daten Allgemeine Java-Themen 6
J Builder Klasse mit Lombok bauen Allgemeine Java-Themen 2
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
M [SOAP] - Klasse aus WSDL ausschließen Allgemeine Java-Themen 2
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
X Klassen Klasse BreakIterator Allgemeine Java-Themen 6
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
kodela Klassen Klasse "vergisst" ihre Daten Allgemeine Java-Themen 2
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
E Socket Dynamische Klasse von ObjectOutputStream lesen. Allgemeine Java-Themen 8
M Matcher-Klasse findet match nicht Allgemeine Java-Themen 6
cool_brivk24 Variablen abfragen von Boolean von anderer Klasse Allgemeine Java-Themen 12
S Seltsames Ergebnis mit Date-Klasse Allgemeine Java-Themen 6
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
Neoline Klassen Singleton Klasse buchmanager Allgemeine Java-Themen 19
M Kapselung Modellierung von Intervallen: Klasse Interval Allgemeine Java-Themen 4
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
ReinerCoder Klasse kann nicht public deklariert werden Allgemeine Java-Themen 2
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
J IndexOutOfBoundsException bei der Nutzung der Klasse Message von mime4j Allgemeine Java-Themen 5
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben