2017-06-28 1 views
1

Je code sur le traitement depuis quelques mois maintenant et j'essaie d'utiliser des classes Java. Je suis un débutant sur les classes Java et je crois que les attributs privés d'une classe ne peuvent pas être modifiés en dehors de cette classe. Cependant, j'ai changé un attribut privé d'un objet dans le fichier setup() de Processing. Je ne comprends pas pourquoi je suis capable de faire ça. Quelqu'un peut-il m'aider?Pourquoi est-ce que je peux changer un attribut privé de sa classe?

Une partie du code de la classe:

public class Character { 
    private String name; 
    ... 

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

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

Le code setup():

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

Merci beaucoup!

+2

** Où ** est le code d'installation? c'est la clé. Est-ce dans le même fichier que la classe Character? –

+0

@HovercraftFullOfEels Non, l'installation est dans le fichier principal tandis que la classe Character est dans un fichier où toutes les classes sont définies. Comment cela affecte-t-il le mécanisme public/privé? – hiberfil

+1

@hiberfil Je n'ai jamais utilisé le traitement, mais en me référant à [cette documentation] (https://processing.org/reference/private.html): "Ce mot-clé est utilisé ** pour interdire aux autres classes ** l'accès aux champs et méthodes au sein d'une classe "(emphase mienne). Cela pourrait être formulé de manière lâche, mais, comme écrit, si votre méthode 'setup()' n'est pas dans une classe, cela implique que 'private' est ignoré. –

Répondre

2

Si cela se trouve dans l'éditeur de traitement, les classes Java sont inner classes dans les coulisses.

C'est pourquoi vous pouvez accéder aux variables privées de la classe à partir de votre esquisse. C'est aussi pourquoi vous pouvez accéder aux fonctions de traitement depuis l'intérieur de votre classe.

Vous pourriez essayer de placer la classe dans son propre onglet. Assurez-vous que l'onglet se termine par .java, donc il est traité comme une "vraie" classe Java. Mais le traitement a tendance à cacher des choses telles que les modificateurs d'accès de votre part, vous préférerez peut-être ne pas trop vous en soucier.