Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
MethodenWie können Klassen auf Klassenfremde Objekte zugreifen?
ist es möglich, das Klassen auf beliebige Objekte zugreifen können?
Ich versuche mal ein triviales Beispiel zu beschreiben:
Klasse 1 erstellt ein Objekt, z.B. eine Matrix M1
Klasse 2 enthält den Konstruktor, die set und get Methoden und gibt auch alles fein zurück an Klasse 1
Jetzt soll Klasse 3 mit der Matrix arbeiten, sie meinetwegen mit Werten füllen.
Wie kommt Klasse 3 jetzt an die Werte aus Klasse 1.
Muss ich dann in Klasse 1 nochmal get und set Methoden erstellen oder kann ich in Klasse 3 sagen M1.Klasse1.[j]; ( das erscheint mir aber irgendwie zu einfach )
Die Klassen sollen unterschiedliche Methoden haben um
Dinge mit dem Objekt anzustellen.
Denkbar wäre eine Klasse 4 für die Matrizen Multiplikation, Klasse 5, Addition etc etc etc. ich will halt nur einmal das Objekt erstellen und dann damit weiterarbeiten
//Main Klasse:
import java.util.*;
import javagently.*;
import java.io.*;
public class Rechnen
{
public static void main(String[] args)
throws IOException
{
dimension test = new dimension();
BufferedReader in = new BufferedReader ( new InputStreamReader(System.in));
int i=0;
int j=0;
test.zahlen();
System.out.println(i+ " " +j);
System.out.println(test.getZeilen()+ " " +test.getSpalten());
i = test.getZeilen();
j = test.getSpalten();
System.out.println(i+ " " +j);
}
}
// Klasse, in der die Matrize erstellte wird:
import javagently.*;
import java.util.*;
import java.io.*;
public class dimension
{
int a;
int b;
public void zahlen()
throws IOException
{
int i=0;
matrize M1 = new matrize();
BufferedReader in = new BufferedReader ( new InputStreamReader(System.in));
System.out.print("Bitte geben Sie die Anzahl der Zeilen ein: ");
this.a = javagently.Text.readInt(in);
M1.setZeilen(a);
System.out.print("Bitte geben Sie die Anzahl der Spalten ein: ");
this.b = javagently.Text.readInt(in);
M1.setSpalten (b);
System.out.println("Die Matrize hat " +M1.getZeilen()+ " Zeilen und "+M1.getSpalten()+" Spalten");
}
public int getZeilen()
{
return a ;
}
public int getSpalten()
{
return b;
}
}
//Die Klasse, in der die Attribute des Objektes gesetzt werden.
public class matrize
{
private int Zeilen;
private int Spalten;
private int Matrix[][] = new int [Zeilen][Spalten];
void setZeilen(int z)
{
this.Zeilen = z;
}
void setSpalten (int s)
{
this.Spalten = s;
}
int getZeilen()
{
return this.Zeilen;
}
int getSpalten()
{
return this.Spalten;
}
}
Mein Ziel ist es, das komplette Objekt M1 an irgendeine Klasse zu übergeben. Im Moment habe ich es in der Klasse "dimension" durch set und get gelöst. aber das erscheint mir recht umständlich.
1. Klassennamen in Java schreibt man in UpperCamelCase, Variablennamen werden klein geschrieben. Du hast es grad umgekehrt gemacht.
2. Deine dimension-Klasse erzeugt aktuell nur eine Instanz der Klasse matrize, gibt sie aber nirgendwo zurück. Die zahlen-Methode von dimension könnte das erzeugte matrize-Objekt z. B. zurückgeben. Dazu müsste der Rückgabewert von void auf matrize geändert werden. Die Variablen a und b von dimension beschreiben übrigens nicht den "Zustand" von dimension, sondern wie mir scheint eher den Zustand der matrize. Schmeiss die Variablen mal raus, und arbeite in der Rechnen-Klasse lieber direkt mit dem matrize-Objekt als mit dem dimension-Objekt.
3. Dein matrize-Objekt ist eigentlich nur ein Wrapper um ein int[][]. matrize hat zwar setter für Zeilen und Spalten, diese beeinflussen aber nicht die Größe der Matrix. So wie es aussieht, hat deine Matrix 0 Zielen und 0 Spalten, und es gibt keine Möglichkeit das zu ändern.