2010-02-08 7 views
2

J'ai récemment commencé à apprendre Java en utilisant JDK1.6. Si c'est une question stupide, excusez-moi s'il vous plaît.Vous pouvez accéder à des variables privées dans une classe à partir de main dans Java?

Si des variables privées peuvent être directement accédées par des objets dans main(), comment sont-elles 'privées'?

public class Account1 
{ 
private int accountNum; 
private String name; 

Account1() { 
    accountNum = 1101; 
    name = "Scott"; 
} 

public void showData() { 
    System.out.println("Account Number: " + accountNum + 
     "\nName: " + name); 
} 

public static void main(String[] args) { 
    Account1 myA1 = new Account1(); 
    myA1.showData(); 
    System.out.println(myA1.accountNum); //Works! What about "Private"?! 
} 
} 

Ce qui donne la sortie:

Account Number: 1101 
Name: Scott 
1101 

Répondre

1

La méthode « principale » d'une classe donnée fait partie de cette classe. Les méthodes faisant partie d'une classe ont accès aux membres privés de cette classe. Cela a du sens pour moi. Cela ne signifie pas nécessairement que vous devriez l'utiliser, bien sûr. Une façon d'y penser est de penser à la connaissance d'une classe par rapport au fonctionnement interne d'une autre classe. Ma classe Personne ne devrait pas savoir ce qui se passe dans ma classe de commande; il appelle simplement des méthodes publiques à ce sujet. Mais tout ce qui est à l'intérieur de la Personne sera bien sûr au courant de la structure interne de la Personne - même une instance différente de la Personne.

5

Votre main est dans la classe Account1, donc elle est toujours dans la même portée.

Les variables privées sont accessibles depuis n'importe quel code appartenant au même type. Si votre méthode principale était dans une classe séparée, elle ne pourrait pas y accéder (sans utiliser de réflexion).

+0

Faites attention - le terme «variable locale» pourrait être trompeur. – finnw

+0

@finnw Bon point. Ajusté à "dans le même champ" – developmentalinsanity

+0

Votre deuxième phrase est également trompeuse. La méthode 'main' n'est dans aucune * instance * de' Account1'. Une déclaration un peu plus correcte serait "... les variables privées peuvent être accédées par n'importe quelle méthode (ou initialiseur) définie dans le même type". –

0

Ils sont privés en ce sens qu'ils ne sont accessibles que par cette classe. Cela signifie qu'ils sont accessibles à partir de méthodes statiques de cette classe (telles que main) et également à partir de méthodes d'instance (telles que showData).

Une instance de la classe peut également accéder aux membres privés d'une autre instance de la classe.

Si vous aviez une classe distincte, par exemple, Account2, il ne serait pas en mesure d'accéder aux membres provate de Account1.

0

Cela est dû au fait que la fonction main() est membre de la classe. Il a accès à tous les membres de la classe.

En code réel, la fonction principale est généralement située dans une classe "harnais" qui amorce réellement le reste du code. Cette classe de harnais est généralement très légère et instancie d'autres classes qui font le vrai travail.

Questions connexes