2010-10-04 24 views
1

Ok, donc j'ai une tâche où je dois créer une classe avec un ensemble de propriétés privées, ce que j'ai fait. Cela devient compliqué parce que je suis assez nouveau dans la programmation java (ou la programmation en général) et je ne suis pas très pratiqué dans l'encapsulation. Je n'ai jamais utilisé des getters/setters ou des constructeurs auparavant. Je comprends les méthodes getter/setter, mais je n'ai pas encore compris toute l'information en ligne pour les constructeurs, ou même comprendre leur but.constructors (java)

Je dois créer des getters/setters et des constructeurs pour chacune des propriétés, donc il semblerait que je devrais apprendre à utiliser ces méthodes. Si quelqu'un pouvait me donner un exemple de classe avec un constructeur et expliquer ce que le constructeur faisait, et pourquoi je l'utiliserais, ce serait bien.

Merci d'avance.

+0

SO n'est pas un remplacement pour Wikipedia - loin de là: http://en.wikipedia.org/wiki/Constructor_(object-oriented_programming). Le premier exemple est Java. (Ou mieux encore, prenez un bon livre, il vous reste beaucoup à apprendre;)) –

+0

En résumé, un constructeur * construit * votre objet. –

+0

"Je suis relativement nouveau dans la programmation java (ou la programmation en général)" Alors, avez-vous déjà utilisé un autre langage de programmation? Laquelle? – mschonaker

Répondre

4

Tout d'abord, bienvenue dans le monde de la programmation :)

permet de regarder un exemple simple.

Dites que vous voulez programmer une classe pour représenter un carré. Lorsque vous créez un objet Carré, vous devez attribuer au Carré certaines propriétés, telles que la longueur de chaque côté. C'est ici que les constructeurs entrent en jeu. La disposition de classe ressemble à ceci, notez que la variable length_of_each_side n'a pas de valeur.

public class Square { 
    int length_of_each_side; 

    public Square() { 
    ... 
    } 

    public Square(int length) { 
    ... 
    } 
} 

Vous pouvez avoir un constructeur par défaut qui vous donnera un carré prédéfini si vous ne spécifiez pas la taille du carré.

public Square() { 
    length_of_each_side = 1; 
} 

ou vous pouvez permettre à quelqu'un de spécifier la taille de la place

public Square(int length) { 
    length_of_each_side = length; 
} 

Si je veux créer une place prédéfinie (longueur 1), il ressemblerait à ceci

Square mySquare = new Square(); 

Si je veux créer un carré et spécifier la longueur de 55, cela ressemblerait à ceci:

Square mySquare = new Square(55); 
+0

Grande, explication simple, pour ne pas mentionner facilement extensible si vous vouliez expliquer les constructeurs lorsqu'il s'agit de l'héritage/polymorphisme. – Crag

2

Je ne sais pas exactement ce que vous regardez à l'école ou ce que votre professeur vous dit, mais juste une suggestion - n'utilisez pas les getters et les setters par habitude. Il y a une raison pour laquelle ils ne sont pas "automatiques" en Java, c'est parce qu'ils ne devraient vraiment pas être là. Quand vous avez un objet, l'idée est de demander à l'objet de faire quelque chose pour vous - en d'autres termes, vous devez fournir des méthodes qui agissent sur les variables plutôt que d'obtenir la variable et d'agir dessus et de mettre retour.

Il y a beaucoup de fois où vous ne pouvez pas éviter les getters - mais ils ne doivent être ajoutés que lorsque vous en êtes sûr et non pas par habitude.

Votre constructeur est le meilleur endroit pour définir toutes vos variables membres. En fait, si vous faites des variables finales (une très bonne habitude à prendre, rend la classe "immuable") le constructeur sera le seul endroit où vous pouvez les assigner.

Votre constructeur est garanti d'être appelé lorsque votre objet est créé, c'est donc un bon endroit pour définir votre objet.Dans votre constructeur si vous vous assurez que l'objet est dans un état valide ET que vous avez des variables membres finales, il est impossible de placer votre objet dans un état invalide - c'est une pratique très pratique et cela peut vous épargner beaucoup de temps de débogage.