static Attribute und Vererbung

magguz

Mitglied
Hallo Leute,

hätte ne kleine Java - Einsteiger Frage. Also ich bräuchte eine abstrakte Oberklasse, welche static Attribute besitzt und verschiedene vererbte Klassen. Deren Attribute sollen allerdings alle unterschiedliche Werte haben. Kleines Beispiel:

klasse1 und klasse2 haben beide attribut var1, dies ist aber in beiden unabhängig von den anderen. Wisster wie? :lol:

Und wüsste zufällig jemand wie ich mit Java3D ein Torus/Donut erzeuge?

ansonsten schönes WE und beste Grüße

Markus
 
Zuletzt bearbeitet:
"Vererbung" und "static" schließen sich in Java irgendwie aus. Kannst Du uns das Problem etwas genauer beschreiben?


Und die Frage zu Java-3D würde ich an Deiner Stelle a) als eigenen Beitrag und b) unter "Spiele - und Multimedia-Programmierung" posten.
 
Hallo Leute,

hätte ne kleine Java - Einsteiger Frage. Also ich bräuchte eine abstrakte Oberklasse, welche static Attribute besitzt und verschiedene vererbte Klassen. Deren Attribute sollen allerdings alle unterschiedliche Werte haben. Kleines Beispiel:

klasse1 und klasse2 haben beide attribut var1, dies ist aber in beiden unabhängig von den anderen. Wisster wie? :lol:


Alle Fields einer Klasse sind objektspezifisch, solange kein static verwendet wird!

Und wüsste zufällig jemand wie ich mit Java3D ein Torus/Donut erzeuge?


Ja.
 
Also um das Ganze nochmal mit nem Beispiel zu untermauern.
Ich bräuchte eine Oberklasse, welche mehrere Attribute hat, sagen wir var1, var2,...
und mehrere Unterklassen...z.B.
Klasse 1: var1= 0.5 , var2=0.3... //Startwerte
Klasse 2: var1= 0.3 , var2=0.02...
Die Variablen sind von der Zeit abhängig und sollen für jede Instanz einer Klassen gleich sein (deswegen dachte ich static)...aber die Abhängigkeiten der einzelnen Klassen unterscheiden sich voneinander... und ich muss halt auf die einzelnen Attribute zugreifen können, ohne dass ich weiß ob es Klasse1 oder 2 ist...

Verstanden was ich meine?

pls help! 🙂




...hmm würdest du es mir verraten?

Ansonsten erstmal thx für die Antworten.

Beste Grüße
 
Zuletzt bearbeitet:
Mach dir in deiner Oberklasse abstrakte Funktionen getVar1 und getVar2 und überschreib sie in den Unterklassen. Kannst du static machen, musst du aber nicht, du gibst ja immer fixe Werte zurück.
 
na die fixen werte hab ich ja nur so hingeschrieben (Als Startwerte), die sollen mit jedem Zeitschritt für alle Instanzen der jeweiligen Klasse geändert werden ?!
Nochmal zum Beispiel ... Ich müsste pro Step sagen können Klasse1.setVar1... , Klasse2.setVar1....


Grüße
 
Zuletzt bearbeitet:
wenn es dir nur um versch. werte geht reichen dir einfach untersch. instanzen einer klasse

da brauchst du keine vererbung
 
Naja alle Instanzen einer Klasse sollen schon die gleichen Werte haben, diese Werte sind aber nicht konstant... Ich glaube ich muss nochmal mein Problem spezifieren.

Ich müsste jeden Step folgendes machen können:
1. best. Anzahl von Objekten der Klassen 1 und 2 erzeugen
2. die Werte Var1 und Var2 für alle Instanzen von Klasse 1 und Klasse 2 ändern ( alle Instanzen von Klasse1 haben den selben Wert Var1 und alle Instanzen von Klasse 2 haben den selben Wert Var1)
3. Ich bekomme ein Object vom Typ der Oberklasse übergeben und möchte auf Var1 zugreifen (weiß an der Stelle nicht ob es Instanz von Klasse 1 oder 2 ist?

hier hab ich noch ein Beispiel, was nochmal bisschen verdeutlichen soll, was ich meine, vielleicht sticht euch ja der Fehler gleich ins Gesicht. Das Beispiel macht nicht viel Sinn, demonstriert aber hoffentlich was ich erreichen möchte.

[Java]

public abstract class Element {

protected static double var1;
protected static double var2;

public static double getVar1() {
return var1;
}
public static void setVar1(double var1) {
Element.var1 = var1;
}
public static double getVar2() {
return var2;
}
public static void setVar2(double var2) {
Element.var2 = var2;
}
}


public class Element1 extends Element{

public Element1(){
super();
var1=0;
var2=0;
}
}

public class Element2 extends Element{

public Element2(){
super();
var1=4;
var2=8;
}
}

import java.util.*;

public class uhiu {

public static void main(String[] args) {
List<Element> elements = new ArrayList<Element>();

Random random = new Random();

for (int i = 0; i < 50; i++) {
if (i % 2 == 0)
elements.add(new Element1());

else
elements.add(new Element2());

Element1.setVar1(Element.getVar1() + 1);
Element1.setVar2(Element.getVar1() - 1);

meth1(elements.get(random.nextInt(elements.size())));
}
}

public static void meth1(Element ele) {
var1 = ele.getVar1;
System.out.println(var1);
}
}

[/code]
Ja und was rauskommen sollte is, dass bei z.B. i= 3 Var1 bei allen Instanzen von Element 1 =3 und bei Element 2 =7 und ich bei meth1 für Instanzen von Element eins 3 und bei zwei 7 rausbekomme.



greets
 
Zuletzt bearbeitet:
Ich bin mir noch nicht sicher, ob ich das Problem verstanden haben, aber bisher hört es sich für mich so an, als könne man in der (abstrakten?) Basisklasse A eine Instanzmethode getXYZ() definieren. Die Ableitungen B1 und B2 dieser Klasse müssen dann getXYZ() irgendwie implementieren - z.B. indem sie den Wert einer statischen Variablen zurückliefern.

Code:
abstract class A {
  abstract int getXYZ();
} 

class B1 extends A {
  private static int valB1;

  int getXYZ() {
    return valB1;
  } 
}

class B2 extends A {
  private static int valB2;

  int getXYZ() {
    return valB2;
  } 
}
Damit kann man getXYZ() sowohl an Instanzen der Klasse B1 als auch an Instanzen der Klasse B2 aufrufen, ohne wissen zu müssen, dass es sich um etwas anders als Instanzen von A handelt. Trotzdem liefern alle Instanzen der Klasse B1 immer den gleichen Wert und alle Instanzen der Klasse B2 ebenfalls immer den gleichen Wert - aber eben möglicherweise einen anderen als die Instanzen der Klasse B1.

In diesem Fall könnte man A auch als Interface definieren anstatt als (abstrakte) Klasse - ob das in deinem Fall auch der Fall ist, musst du entscheiden.
 
static ist instanzenblind. Wenn du in einer instanz die variable setzt gilt die fuer alle anderen ebenso. D.h. du kannst nicht verschiedene werte haben.

ich wuerde static komplett weglassen - jdf nach deine beschreibung. Oder gibt es zig Element1 bzw Element2 Objekte, die immer die selben var1, var2 werte haben (muessen)?
 
Hallo Leute,

vielen Dank für Eure Hilfe! Murray hat verstanden was ich meinte ... Ich gebe zu : im Nachhinein ist es etwas sträflich nicht selbst darauf gekommen zu sein! Deswegen danke ich euch umso mehr, euch mit dieser Thematik befasst zu haben.


Beste Grüße

Markus
 

Zurück
Oben