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.
Hallo Zusammen,
ich habe folgendes Problem:
Ich habe eine Datei in der ich mein Programm habe und greife jetzt schon ohne Probleme auf andere Dateien und deren Variablen zu.
z.B. habe ich globale Variablen in die Datei Variablen.java einsortiert und mit:
Variablen.XYZ kann ich auch wie ich mir das vorstelle darauf zugreifen.
Jetzt wollte ich eine neue Klasse erstellen und da geht das aber nicht so wie ich mir das vorstelle:
Folgenden Code habe ich in Datei "T" drin:
Java:
public class T extends Object
{
private int x;
private int y;
public T (int x, int y)
{
this.x = x;
this.y = y;
}
public class W extends T
{
public W ()
{
super(1,1);
}
}
Mit
Java:
T Testzgriff= null;
Testzgriff= new T(1,1);
Kann ich darauf zugreifen.
Es geht aber nicht wenn ich auf die abgeleitet Klasse "W" zugreifen will:
Java:
T.W Testzgriff= null;
Testzgriff= new T.W();
"keine einkapselnd Instanz von "T" akzeptabel"
Langer rede Kurzer Sinn:
Ich würde gerne alle Klassen und abgeleitet Klassen in eine Datei stecken und sie natürlich auch benutzen
Muss ich jetzt für jede abgeleitete Klasse eine neue Datei erstellen oder sie in die Datei "stopfen" in der ich sie benutzen will?
Da muss es doch eine schönere Lösung geben.
und darekkay's Post zu erweitern und HimBromBeere in der allgemeinen Sicht zu widerspreichen:
und die statische innere Klasse kann auch public sein,
2x Top Level public geht aber nicht in einer Datei
Muss ich jetzt für jede abgeleitete Klasse eine neue Datei erstellen oder sie in die Datei "stopfen" in der ich sie benutzen will?
Da muss es doch eine schönere Lösung geben.
Es kommt darauf an, was man unter "schön" versteht Alle Klassen in eine Datei zu stopfen ist aber keinesfalls schön. Es mag zunächst kompakt zu erscheinen, da man auch nicht so viele Dateien hat. Aber wenn dein Projekt und die Klassen wachsen, werden diese riesig und unübersichtlich. Die abgeleiteten Klassen gehören somit auf jeden Fall in separate Dateien. Laut Clean Code sollten gar keine inneren Klassen genutzt werden -> alles auslagern.
Ich habe jetzt halt für jede Thematisch Gruppe eine Datei gemacht, in der finden sich alle nur dazu gehörigen Klassen (jetzt auch abgeleitete), variablen und Funktionen.
GUI, Globale Variablen, und das oben genannte Beispiel
An und für sich könnte man auch über Factories nachdenken.
Also anstatt eine Klasse W, wie in deinem ersten Listing lediglich eine Factory die T mit den entsprechenden Parametern aufruft.
Java:
class TFactory{
public T createWInstance(){
return T(1,1);
}
}
Man könnte auch darüber nachdenken W als private Klasse innerhalb von T zu definieren, dann kann man Methoden von W überschreiben und sofern keine zusätzlichen öffentlichen Methoden vorhanden sind das ganze als T zurückgeben.
Java:
public class T
{
public void a(){
System.out.println("I'm a T");
}
public static T createW(){
return new W();
}
}
private class W extends T
{
public void a(){
System.out.println("I'm a W");
}
}
ich würde grundsätzlich die verwendeten klassennamen ändern da gerade "E", "T", "K", "V" und andere als "generics" missverstanden werden können ... *auch wenn "<>" fehlt* ...