Variablen-Problem

Status
Nicht offen für weitere Antworten.
J

Julyanne

Gast
Und nochmal ne Frage ^^
Habe folgendes Problem:

Classes Annaeherung & Weitspringer erben von Abstract Class Bild
Class Logical will beide benutzen

in Logical wird folgendes deklariert:
Code:
   Bild gri;
	Annaeherung grid;
	Weitspringer grid2;

Code:
		gri = new Annaeherung();
		grid = (Annaeherung) gri;

Hier möchte ich klar machen, dass der Variable grid nun ein "Annaeherung" zugewiesen wird und grid gecastet werden muss, damit ich auch auf die Variable feld wie folgt Zugriff habe:
z.B.
Code:
grid.feld.length

Das läuft alles soweit ohne Probleme. Jetzt will ich aber im Laufe des Programms das eigentliche Bild in ein "Weitspringer" umwandeln ...

Jemand ne Idee? denn grid ist ja vom Typ Annaeherung .. und soweit ich weiß lässt sich das ja nicht zurück in Bild casten oder?! Eigentlich war dafür Bild gri; gedacht, aber so wirklcih will das nicht funktionieren ...

Danke für jede Hilfe!
 

Der Müde Joe

Top Contributor
>Classes Annaeherung & Weitspringer erben von Abstract Class Bild
>Class Logical will beide benutzen

Java kennt, nicht wie C++, keine Multiple Inheritance.
Erben kann man nur von einer Klasse, implementieren
kann man hingegen mehrere (Interfaces)

> im Laufe des Programms das eigentliche Bild in ein "Weitspringer" umwandeln ...

auch in diesem Thread wird das nicht gehen

Bild b: ist vom Typ Bild und wird dies auch bleiben bis die Variable nicht mehr gültig ist.
Auch ein Bild b = (AndereKlasse)b; ändert daran nix.
Es bleibt nur die möglichkeit (immer noch):
AndereKlasse ak = (AndereKlasse)b;

>grid.feld.length

public statisch ist wie schon erwähnt nicht sehr gut. Man kann zwar einfach darauf zugreifen und....das wars schon...

Wenn es eine "saubere" Abstraktion ist, ist das ganze nicht statisch und du bietest (im Interface) eine Methode getFeld und
alle erben das. Sprichst dann das Feld über die Methode an und der Rest macht die polymorphie..
 
J

Julyanne

Gast
wie kommst du auf ne multiple inheritance? sowohl Annaeherung als auch Weitspringer erben nur von einer Klasse, Bild ...?!
und zum Casten: das funktioniert schon, ich wandle ja nicht, wie in deinem beispiel b um, sondern genau das, was du selbst geschrieben hast, ak = (AndereKlasse) b; da hast du dich wahrscheinlich verlesen.

Aber die Idee mit getFeld ist wahrscheinlich ganz gut, dann könnte ich doch eigentlich eine Referenz der Oberklasse, also Bild benutzen, oder?!

Vielen Dank für deine wiederholte Hilfe! ^^
 
J

Julyanne

Gast
Hm, also entweder hab ich was falsch verstanden, was falsch gemacht, oder es funktioniert nich ^^

Also meine klasse Bild sieht jetzt folgendermaßen aus:
Code:
import javax.swing.JButton;

public abstract class Bild {
	
	public static short[][] h;
	public static short[][] v;
	public static JButton[][] feld;
	public static short felderV;
	public static short felderH;
	public static short zahlenV;
	public static short zahlenH;
	
	public abstract void horizontal();
	public abstract void vertikal();
	public abstract JButton[][] getFeld();
	public abstract int getFeldSize();	
	public abstract int getFeldSizeHor();
}

Ein Ausschnitt aus z.B. Annaeherung :

Code:
public static short[][] h;
	public static short[][] v;
	public static JButton[][] feld;
	public static short zahlenV = 8;
	public static short zahlenH = 7;
	
	Annaeherung(){
		
		horizontal();
		vertikal();
		feld = new JButton[37][36];	
	}
	
	
	public JButton[][] getFeld(){
		return feld;
	}
	public int getFeldSizeVer(){
		return feld.length;
	}
	
	public int getFeldSizeHor(){
		return feld[0].length;
	}

So, und um später auch Weitspringer benutzen zu können, nehme ich jetzt eine Referenz vom Typ Bild, die auf ein Annaeherung-Objekt zeigt.
Soweit so gut.

Bild grid = new Annaeherung();

Und nun will ich mit z.B. grid.getFeldSizeVar() in meiner Hauptklasse arbeiten - und ich krieg immer noch ne NullPointerException ... warum erkennt die Bild-Referenz nicht die Variablen von dem Objekt, auf das es zeigt??
Nehme ich die deklarierten Variablen aus Bild raus, sagt er mir gleich, dass die gar nich vorhanden sind, wenn ich auf sie zugreifen will...

warum und was kann ich dagegen machen???
 

Templon

Bekanntes Mitglied
Poste mal die ganzen Klassen Bild und Annaeherung, und der Teil von der anderen Klasse, wo die Exception auftritt.
 

Der Müde Joe

Top Contributor
ein Beispiel:

ohne static!! (sieht schrecklich aus so viel statics)

Code:
import javax.swing.JButton;

public abstract class Bild {

	// alle die Erben haben diese Feld!!!
	private JButton[][] feld;

	public Bild() {
		// 25 JButtons...aber keiner initialisiert
		// 25 * null
		this.feld = new JButton[5][5];
	}

	public JButton[][] getFeld() {
		return this.feld;
	}

	// eine subklasse
	public static class SubKlasse extends Bild {
		public SubKlasse() {
			super();
		}
	}

	// eine zweite subklasse
	public static class SubKlasse2 extends Bild {
		public SubKlasse2() {
			super();
			JButton[][] bla = this.getFeld();
			// dann erstellen wir mal einen Button und tun ihn nach [0][0]
			bla[0][0] = new JButton();
		}
	}

	public static void main(String[] args) {
		Bild bild = new SubKlasse();
		JButton[][] f = bild.getFeld();

		System.out.println(f.length); // 5
		System.out.println(f[0].length); // 5
		System.out.println(f[0][0]); // null

		Bild bild2 = new SubKlasse2();
		JButton[][] f2 = bild2.getFeld();

		System.out.println(f2.length); // 5
		System.out.println(f2[0].length); // 5
		// hier haben wir nun ein richtigen Button
		System.out.println(f2[0][0]); // javax.swing.JButton[.....
	}
}

EDIT:
das static ist nur wegen den Inneren Klassen da.
So geht alles in ein File...
 
J

Julyanne

Gast
hmmm ... danke für die viele arbeit!
ja stimmt, das static hatte ich jetzt vergessen ^^

aber das problem ist - ein konstruktor bringt mir nix, aus dem einfachen grund, dass grade die größe dieses feldes bei allen subklassen unterschiedlich sein soll! wodurch ich in Bild nichts initialisieren kann und somit die NullPointerException kommt ... :(
 

Der Müde Joe

Top Contributor
Julyanne hat gesagt.:
aber das problem ist - ein konstruktor bringt mir nix, aus dem einfachen grund, dass grade die größe dieses feldes bei allen subklassen unterschiedlich sein soll!

abrakadabra...

Code:
import javax.swing.JButton;

public abstract class Bild {

	// alle die Erben haben diese Feld!!!
	private JButton[][] feld;

	public Bild(int x, int y) {
		this.feld = new JButton[x][y];
	}

	public JButton[][] getFeld() {
		return this.feld;
	}

	// eine subklasse
	public static class SubKlasse extends Bild {
		public SubKlasse() {
			super(27, 7);
		}
	}

	// eine zweite subklasse
	public static class SubKlasse2 extends Bild {
		public SubKlasse2() {
			super(2,2);
			JButton[][] bla = this.getFeld();
			// dann erstellen wir mal einen Button und tun ihn nach [0][0]
			bla[0][0] = new JButton();
		}
	}

	public static void main(String[] args) {
		Bild bild = new SubKlasse();
		JButton[][] f = bild.getFeld();

		System.out.println(f.length); // 27
		System.out.println(f[0].length); // 7
		System.out.println(f[0][0]); // null	

		Bild bild2 = new SubKlasse2();
		JButton[][] f2 = bild2.getFeld();

		System.out.println(f2.length); // 2
		System.out.println(f2[0].length); // 2
		// hier haben wir nun ein richtigen Button
		System.out.println(f2[0][0]); // javax.swing.JButton[.....
	}
}
 
J

Julyanne

Gast
Aaaah danke - das funktioniert jetzt erstmal! ^^

Leider tut sich jetzt schon wieder ein anderes Problem auf, was auch damit zu tun hat :(

Da geht dein Lösung ja wunderbar ... Leider habe ich noch zwei weitere Felder, die sich in Annaeherung und Weitspringer unterscheiden.
Problem: Hier werden sie nicht nur deklariert, sondern auch noch initialisiert - und da auch noch bei beiden an unterschiedlichen Koordinaten unterschiedliche Werte ...
Dafür auch noch ne Idee? :(
Langsam erscheint mir das etwas unlösbar ....

(btw, würde ja niemanden damit behelligen, wenns nich wichtig wär ... is für mein abitur, meine 5. prüfungskomponente - ein etwas großes programm - zumindest verhältnismäßig für jemanden der erst ein jahr lang bissel java macht :D)
 
G

Guest

Gast
achso:
Natürlich könnte ich die Werte alle einzeln mit einer Funktion eintragen lassen .. Problem: Es handelt sich pro Klasse um ca. 50-100 Einträge ......
In denen auch kein nutzbares Muster besteht...
 
J

Julyanne

Gast
Sooo - ich hab jetzt nochmal in Ruhe drüber nachgedacht und dabei festgestellt: die Variante, das erwähnte Feld auch mit einer Methode zu initialisieren, ist zwar jetzt eine große Arbeit - aber hätte ich es von Anfang an gemacht, wär es kaum weniger Arbeit als die Variante, die ich habe ^^

Also hab ich das ganze jetzt doch geändert - und es scheint zu funktionieren!!!

Vielen Dank =)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
T Problem bei Übergabe von Variablen Java Basics - Anfänger-Themen 1
Joew0815 Compiler-Fehler Unexpected Type - Problem mit Variablen rechnen Java Basics - Anfänger-Themen 7
A Variablen-Abruf-Problem. Java Basics - Anfänger-Themen 12
F Java Variablen Problem Java Basics - Anfänger-Themen 8
M Problem mit Variablen Java Basics - Anfänger-Themen 16
T Variablen problem Java Basics - Anfänger-Themen 2
A Problem: Aufruf von Methoden mit Variablen Java Basics - Anfänger-Themen 7
G Problem mit Variablen-Typen Java Basics - Anfänger-Themen 3
C Taschenrechner -> Anzeige/Variablen Problem Java Basics - Anfänger-Themen 9
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
T Variablen Java Basics - Anfänger-Themen 1
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
M Aufsummieren von variablen Wertegrößen Java Basics - Anfänger-Themen 17
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
Arif Vererbung Methodenvererbung mit finalen Variablen Java Basics - Anfänger-Themen 1
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Variablen umbenennen Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
mars90 Fehler in der Variablen Deklaration Java Basics - Anfänger-Themen 8
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
A Übergreifende Variablen Java Basics - Anfänger-Themen 17
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
P Variablen Variablen voneinander abhängig Java Basics - Anfänger-Themen 54
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
temi Redundante Variablen Java Basics - Anfänger-Themen 29
Aprendiendo Zweifel mit versteckter Variablen Java Basics - Anfänger-Themen 16
L Variablen einmal nur zu weisen Java Basics - Anfänger-Themen 62
D Statische Variablen/Methoden Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
S Vererbung Variablen klassenübergreifend nutzen Java Basics - Anfänger-Themen 42
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
L Variablen dekleration + reset Java Basics - Anfänger-Themen 16
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
S Variablen Flexible Variablen Namen Java Basics - Anfänger-Themen 3
R Erste Schritte 3 Variablen hochzählen lassen Java Basics - Anfänger-Themen 1
RowdyN Variablen Variablen beliebig benennen? Java Basics - Anfänger-Themen 6
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
H Variablen einer Schleife zwischenspeichern Java Basics - Anfänger-Themen 2
P Klassen Variablen von einer Klasse zur anderen Java Basics - Anfänger-Themen 5
H Objekt überschreibt Variablen vorheriger Objekte Java Basics - Anfänger-Themen 2
P Variablen in Excel speichern Java Basics - Anfänger-Themen 6
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
F Variablen unterschiedlicher Datentypen Java Basics - Anfänger-Themen 6
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
P Textfelder in Variablen speichern Java Basics - Anfänger-Themen 13
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
J Vererbung Variablen aus Superklasse übernehmen Java Basics - Anfänger-Themen 2
L Variablen aus TXT Datei auslesen und vergleichen. Java Basics - Anfänger-Themen 5
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
L zwei Variablen gleichzeitig übergeben Java Basics - Anfänger-Themen 6
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
D Klassen Verhalten von Klassenvererbung bei Variablen Java Basics - Anfänger-Themen 1
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben