2017-06-28 4 views
1

Ich code auf Verarbeitung für ein paar Monate jetzt und ich versuche, Java-Klassen zu verwenden. Ich bin ein Neuling auf Java-Klassen und ich glaube, dass private Attribute einer Klasse nicht außerhalb dieser Klasse geändert werden können. Allerdings habe ich ein privates Attribut eines Objekts in setup() void von Processing geändert. Ich verstehe nicht, warum ich das kann. Kann mir jemand helfen?Warum kann ich ein privates Attribut außerhalb seiner Klasse ändern?

Ein Teil des Klassencode:

public class Character { 
    private String name; 
    ... 

    public Character(String pName, ...) { 
    name = pName; 
    ... 

    public void dname() { 
    println(this.name); 
    } 
} 

Der setup() Code:

void setup() { 
    player = new Character("John Doe", ...); 
    player.dname(); //I get "John Doe". 
    player.name = "tara"; 
    player.dname(); //I get "tara", without any error. 
} 

Thank you very much!

+2

** Wo befindet sich der Setup-Code? Das ist der Schlüssel. Befindet es sich in der gleichen Datei wie die Zeichenklasse? –

+0

@HovercraftFullOfEels Nein, das Setup befindet sich in der Hauptdatei, während sich die Zeichenklasse in einer Datei befindet, in der alle Klassen definiert sind. Wie wirkt sich das auf den öffentlich-privaten Mechanismus aus? – hiberfil

+1

@hiberfil Ich habe noch nie mit der Verarbeitung gearbeitet, aber mit Bezug auf [diese Dokumentation] (https://processing.org/reference/private.html): "Dieses Schlüsselwort wird verwendet **, um anderen Klassen ** den Zugriff auf die Felder und zu verbieten Methoden innerhalb einer Klasse "(Hervorhebung meins). Das mag frei formuliert sein, aber wie gesagt, wenn Ihre 'setup()' - Methode nicht in einer Klasse ist, bedeutet dies, dass 'private' ignoriert wird. –

Antwort

2

Wenn dies im Verarbeitungseditor ist, dann sind Java-Klassen hinter den Kulissen inner classes.

Aus diesem Grund können Sie in Ihrer Skizze auf private Variablen in der Klasse zugreifen. Aus diesem Grund können Sie auch auf Bearbeitungsfunktionen innerhalb Ihrer Klasse zugreifen.

Sie könnten versuchen, die Klasse in eine eigene Registerkarte zu setzen. Stellen Sie sicher, dass die Registerkarte mit .java endet, so dass es als eine "echte" Java-Klasse behandelt wird.

Aber Verarbeitung neigt dazu, Zeug wie Zugriffsmodifikatoren von Ihnen zu verstecken, so dass Sie vielleicht am besten sein, nur nicht zu viel darüber zu kümmern.

Verwandte Themen