0

Ich spiele gerade mit den unterschiedlichen "access levels" in Java herum und hab ein Package mit den Klassen Alpha und Beta erstellt.

Alpha hat folgenden Code:

package package_one;

   public class Alpha {

        // different access levels

            private int variablePrivate = 1;
        /*default*/ int variableDefault = 2;
          protected int variableProtected = 3;
             public int variablePublic = 4;

        void dummy () {
            System.out.println("Visible variables: " + variablePrivate + variableDefault + variableProtected + variablePublic);
        }

    }

Beta hat diesen Code:

package package_one;

public class Beta {
    public static void main(String[] args) {
        Alpha object1 = new Alpha();
        object1.dummy();
    }
}

Wenn ich also die Methode dummy in Beta ausgebe, ist der Output folgender:

Visible variables: 1234

Wie kann das sein, dass die private Variable variablePrivate = 1 ausgegeben wird? Sie sollte doch nur innerhalb der Klasse Alpha zu sehen sein.

gefragt

Schüler, Punkte: 10

 
Kommentar schreiben
1 Antwort
0

Ganz einfach: deine dummy() Funktion ist public. Daher kannst Du in der Beta Klasse dummy() aufrufen.
Dummy an sich allerdings ist eine Funktion der Klasse Alpha, und kann daher auf alle globalen Variablen der Klasse Alpha zugreifen.

Würdest Du jetzt versuchen Alpha.variablePrivate in der Beta Klasse aufzurufen, würde das nicht gehen, da Beta nicht direkt auf private Variablen Alphas zugreifen kann.

Dies ist auch der Grund dafür, weshalb es im Regelfall public getter- & setter-Methoden gibt. Diese werden von außerhalb aufgerufen und bearbeiten eine globale Variable. Wenn Du nicht willst, dass eine Variable von außen geändert werden kann, lässt Du die setter-Methode weg. Willst Du nicht, dass man von außen die Variable bekommen kann, lässt Du die getter-Methode weg.

public int getVariablePrivate() {
    return variablePrivate;
}

public void setVariablePrivate( int newVariablePrivate) {
    variablePrivate = newVariablePrivate;
}
Diese Antwort melden
geantwortet

Punkte: 25

 

Prinzipiell richtig, ich würde aber auf den Ausdruck "globale Variable" verzichten und nur "Variable" verwenden. Im Gegensatz zu anderen Programmiersprachen gibt es in Java keine globalen Variablen, da diese immer zu einer Klasse gehören und nicht alleine existieren können.

  ─   b15g 06.12.2021 um 22:03

Danke für diesen Hinweis

  ─   jupiter 07.12.2021 um 09:11

Kommentar schreiben