Vererbung/Globale Variablen

skiwan

Mitglied
Hallo liebes Forum ich habe da ein Problem

Ich möchte gern so etwas wie Globale Variablen haben, so das ich sie in jeder beliebigen Klasse Aufrufen und Verändern kann.

Das ganze wollte ich einfach per vererbung machen, was im Grunde auch funktioniert, nur habe ich das Problem das meine Main Methode also

Java:
static public main ...

Ja keine Vererbung haben kann bzw die Variablen nicht vererbt werden können an diese Static Methode.

Hat jemand eine Lösung für mich Parat?


P.s Wenn ihr genauren Javacode braucht einfach bescheid sagen.
 
Die lösung heisst [c]public static[/c] und wenn der Wert konstant ist [c]public static final[/c]. Das EInfach in eine Klasse, die public in ihrem Package ist:
Java:
public class GVars
{
    public static final int KONSTANTE;
    public static double VARIABLE;
}
...
GVars.VARIABLE
 
Globale Variablen stehen den Prinzipien der OOP direkt entgegen, public static ohne final für Felder ist das Problem, nicht die Lösung.

Code zeigen ist immer gut, auch wäre es gut zu wissen was du denn konkret erreichen möchtest, denn das im OOP Sinne "falsche" Konzept der globalen Variablen lässt sich gut durch OOP Lösungen ersetzen.
 
Also im Grunde ist das ganze so.
in der Main classe habe ich eine variable (nennen wir sie mal Geld)
Diese variable wird in der Main verändert.
gleichzeitig wird aber auch überprüft das die variable Geld ungleich null ist

nun möchte ich in einer anderen classe/Methode auf diese variable zugreifen und sie verändern
nebenbei muss aber die Main Methode dauerhaft überprüfen das "Geld" nicht null ist.


an sich könnte ich das ganze mit meinen Kenntnissen auch alles in eine classe schreiben
das ganze wurde aber sehr unübersichtlich enden, daher benutze ich mehrere Klassen.


als ich die Variablen per public static Main deklariert habe könnte ich zwar in allen andeRen Klassen auf die variablenwerte zugreifen habe aber keine Ahnung wie ich diese dann wieder verändern kann.


Geht dies dann einfach über das erwähnte

GVars.variable = gvars.variable - 3

wenn ich zb die variable um 3 veringern will?
 
Globale Variablen stehen den Prinzipien der OOP direkt entgegen, public static ohne final für Felder ist das Problem, nicht die Lösung.
[...] denn das im OOP Sinne "falsche" Konzept der globalen Variablen lässt sich gut durch OOP Lösungen ersetzen.

Es macht einen Unterschied, ob ich eine Klasse anlege nur für globale Variablen oder ob ich bestimmte Eigenschaften einer Klasse public static mache, damit alle diese Lesen und / oder schreiben können.

Ausserdem hat der TE nach globalen Variablen und nicht nach einer OOP Lösung für sein Problem gefragt.
 
Es macht einen Unterschied, ob ich eine Klasse anlege nur für globale Variablen oder ob ich bestimmte Eigenschaften einer Klasse public static mache, damit alle diese Lesen und / oder schreiben können.
Nö, macht es nicht.
Globale Variablen sind immer globale Variablen, und die sind im Sinne der OP immer schlecht.

Ausserdem hat der TE nach globalen Variablen und nicht nach einer OOP Lösung für sein Problem gefragt.
Kommt öfters vor, dass im Anfängerforum zuerst von den Fragen nach falschen Lösungen gefragt wird, dafür ist es ja da, und dann sollte man ihnen bessere Lösungen im Sinne der OOP vorschlagen.

@skiwan
Du kannst mit Methoden auf Attribute eines Objekte zugreifen.
Warum sollte deine main Methode prüfen ob genug Geld da ist, das sollte das Objekt selber machen, zB. in der Methode in der das geld gesetzt wird.
 
Java:
public class Wallet {

    private int money;

    public Wallet(int money) {
        this.money = money;
    }

    public void add(int n) {
        money += n;
    }

    public void remove(int n) {
        if (money - n < 0) {
            throw new IllegalArgumentException("out of money!");
        }
        money -= n;
    }
}

Nun ist sowas möglich:
Java:
Wallet wallet = new Wallet(20); // nun sind 20CHF/EUR/Kartoffeln/... drin
wallet.add(2); // 22
wallet.remove(12); // 10
wallet.remove(9); // 1
wallet.remove(2); // -1 -> IllegalArgumentException
 

Zurück
Oben