Unerwartete Vererbung

Status
Nicht offen für weitere Antworten.

wildbret

Aktives Mitglied
Hallo,

ich habe eine 1600 Zeilen lange Klasse mit ~150-200 "globalen?" Variablen und mehreren Methoden, die auf diese Variablen zugreifen und diese verändern können müssen. Die Methoden rufen sich gegenseitig auf.

Nun wollte ich die Länge der Klasse reduzieren, indem ich die Methoden in eigene Klassen auslagere, das wäre auch später für die Dokumentation (Klassendiagramm etc) von Vorteil.

-Vererbung über Konstruktor
Ist in meinem Fall bei so vielen Variablen nicht sinnvoll

-Vererbung über "extends"
Habe ich versucht und bin überrascht, dass es nicht funktioniert.
Klasse_B extends Klasse_A und erbt damit alle globalen Variablen die in Klasse_A stehen.
Wenn ich die Variablen dann aber in Klasse_B benutze sind diese neu initialisiert.
Ich brauche aber in Klasse_B die gleichen Werte wie in Klasse_A, damit ich Methoden die im Moment in Klasse_A stehen nach Klasse_B auslagern kann.

Beispiel:
Code:
public class Klasse_A {
   //150-200 Variablen
   int testVar = 0;
   
   //viele Methoden, die die Varialen ändern.   

   public void testMethode () {
      testVar = 4;
      System.out.println("Klasse_A: "+testVar);
      Klasse-B kb = new Klasse-B();
   }
}

Code:
public class Klasse_B extends Klasse_A {
   public Klasse_B() {
      System.out.println("Klasse_B: "+testVar);
   }
}

Ergebnis in der Console:
Klasse_A: 4
Klasse_B: 0

Eigentlich "spiele" ich jetzt schon lange genug mit java, dass ich das wissen müsste und hab auch nach Vererbung gesucht, aber irgendwie hab ich ein Brett vorm Kopf.

Danke für eure Hilfe
 
G

Gast2

Gast
du machst eine neue Instanz ... du hast 2 Objekte warum sollten diese beide objekte was miteinander zu tun haben???
ich weiß ja nicht was für methoden du in klasse a alles aufrufst... aber wenn die beide objekte die gleichen werte haben sollen. Musst du für dein 2tes Objekt die gleichen methoden nochmal aufrufen oder eben eine setMethode benutzen oder im konstrukor übergeben oder oder oder...
Aber ich versteh nicht wie du darauf kommst dass wenn du ein neues Objekt hast, dass es Daten von deinem 1. objekt haben sollte???
 

HLX

Top Contributor
Du musst Klassen von Objekten unterscheiden. Mit Aufruf des Konstruktors wird ein neues Objekt erzeugt. Jedes erzeugte Objekt hat seine eigenen Werte. Wenn du willst, dass es objektübergreifende, bzw. klassenbezogene Variablen gibt musst du diese als Klassenvariable (static) anlegen.
 
B

Beni

Gast
"globale" Variable: das gibt es nicht in Java. "Statische" Variablen sind das nächste zu globalen Variablen, was du hast sind "member"-Variablen.

Ich hatte das Problem auch schon. Meine bevorzugte Lösung ist ein paar Methoden und Variablen zu nehmen, und in eine andere Klasse zu schieben. Das gibt dann in beiden Klasse erstmal einige Compiler-Fehler (fehlende Methode/Variable).
Als nächstes lasse ich dann die Klassen jeweils eine Referenz auf die andere haben. Mit ein paar Gettern/Settern wird das dann wieder lauffähig.
Das wäre wohl deine Konstruktor-Lösung? Jedenfalls: das funktioniert auch bei 4000-Zeilen-Monstern, und ist IMHO die einzige Lösung die ein komplettes Neuschreiben verhindert. Obwohl: alles neu schreiben kann auch eine gute Idee sein, hängt davon ab wie "schön" dein aktueller Code ist.

Beispiel:
Code:
public class Original
  private int a;
  private int b;
  private int c;
  private int d;
  ...
  private int z;

  public int something(){
    a = b + c;
    return a;
  }  
}

Wird dann aufgeteilt in diese zwei Klassen:
Code:
public class Original{
  private ProcessorA a;
  private int c;
  private int d;
  ...
  private int z;

  public Original(){
    a = new ProcessorA( this );
  }

  public int getC(){
    return c;
  }

  public int something(){
    return a.something();
  }
}

Code:
public class ProcessorA{
  private Original original;

  private int a;
  private int b;

  public ProcessorA( Original original ){
    this.original = original;
  }

  public int something(){
    a = b + original.getC();
    return a;
  }
}

Allenfalls ist das auch gleich eine gute Gelegenheit um ein paar Interfaces einzuführen, und so die Klassen weit voneinander zu trennen.
 
G

Gast2

Gast
@ Beni mach mal die void(s) raus, die passen glaub nicht so ganz ;)
 

Final_Striker

Top Contributor
irgendwie verstehe ich nicht, wie du durch vererbung deinen code trennen willst. ich bin jetzt nicht der java profi, fonde aber trotzdem das es ein ganz flascher ansatz ist.
 

wildbret

Aktives Mitglied
Ok, erstmal Danke für eure Antworten.

Ich habe nun verstanden warum die Variablen leer sind.

Zu der Frage, warum ich meinen Code trennen will:
Stellt euch vor wir haben 150 Variablen die von 5 nacheinander ablaufenden Methoden beschrieben werden.
Am Ende dieser Kette von Methoden soll die Methode writeDB() die Variablen in eine Datenbank schreiben.
Wenn ich die Methode writeDB() nun in eine andere Klasse verlagern möchte, muss ich Zugriff auf die 150 Variablen haben und zwar auf genau die, die von den 5 Methoden gesetzt wurden.

Über das Beispiel von Beni muss ich noch etwas Nachdenken, weil ich müsste dann ja 3-7 neue Klassen schreiben, die alle eine Referenz auf andere haben.

Wenn ich 150 get/set-Methoden schreibe ist das viel Arbeit und Zeilen spare ich dann auch nicht.
Ich glaube damit wird alles komplizierter/unübersichtlicher, als wenn ich den 1500-zeiler lasse wie er ist.
Ich dachte halt, es ist besserer Programmierstil wenn man so lange Klassen vermeidet und so viel wie möglich in eigene Klassen ausgliedert, lieg ich damit total falsch?
 
G

Gast2

Gast
1.get/set musst du nicht selber schreiben eine gescheite IDE übernimmt das für dich...
2. warum willst du die methode verlagern?
 

wildbret

Aktives Mitglied
zu 1: Klingt interessant, muss ich mal schaun wie ich das mit Eclipse hin bekomme.
zu 2: Wegen der Übersichtlichkeit wollte ich aus der langen Klasse so 3-7 Kleinere machen.
 
G

Gast2

Gast
klick auf irgendeine variable -->rechte maustaste-->source-->generate getter/setter--> alle attribute auswählen die du willst...
 
G

Gast2

Gast
hehe ohja =) wie du siehst kannst so auch konstruktoren usw. erzeugen...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Unerwartete Antwort Java Basics - Anfänger-Themen 1
G unerwartete Ergebnisse beim URL auslesen Java Basics - Anfänger-Themen 2
J unerwartete NPE Java Basics - Anfänger-Themen 15
C Trotz "synchronized" unerwartete Ausgabe Java Basics - Anfänger-Themen 2
S Unerwartete Ausgabe Java Basics - Anfänger-Themen 6
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben