7
votes

Qu'est-ce que "cela ()" fait dans un constructeur?

J'ai deux questions sur le code suivant. 1. Comment construire le troisième constructeur sans utiliser Setter? 2. Que fait cela () dans le dernier constructeur. XXX

Ma solution pour la question est Personne (adresse d'objet) { cette adresse.address = (string) adresse; } Cependant, je ne suis pas sûr de cela.

et je pense que cela (); Dans le dernier constructeur appelle Constructeur Person constructeur () {}, mais si tel est le cas, est-ce que cela signifie que deux objets de personne sont créés lorsque j'appelle xxx

merci !!!


1 commentaires

Merci pour les réponses rapides. J'étais en train de lire un autre post et je viens de sortir avec ces deux questions incertaines, ainsi composant cet exemple. Cependant, la question est claire maintenant, merci encore.


6 Réponses :


0
votes

Vous avez raison sur la dernière déclaration, mais deux objets de personne ne sont pas créés. En interne, c'est comme un appel de méthode. Je ne comprends pas ce que vous essayez de réaliser avec ce code. Pour invoquer le dernier constructeur, nouvelle personne ("1", "2") ou interne ceci ("1", "2") dans un constructeur. Il n'y a pas non plus de setters ici. Setteurs sont des méthodes telles que SetName (String) , SETADDRESS (String) et ainsi de suite. Getters sont des méthodes telles que string getname () , chaîne getAddress () .

Comme une autre réponse indiquée, vous ne pouvez pas non plus avoir deux constructeurs avec les mêmes types d'arguments. Créez simplement un constructeur avec tout ce dont vous avez besoin pour y figurer.


0 commentaires

0
votes
  1. Désolé n'a pas compris la question
  2. Oui, cela appelle le premier constructeur. Mais ne vous inquiétez pas, deux instances ne seront pas créées! La création d'une nouvelle instance est effectuée en deux parties: allocation de mémoire, constructeur appelant. Donc, si vous appelez en interne un autre constructeur, il suffira d'exécuter ce code. Constructeur lui-même n'est qu'une méthode spéciale, elle ne crée pas d'instance

0 commentaires

11
votes

Le problème avec la personne personne (nom de chaîne) et personne (adresse de chaîne) est-ce que vous ne pouvez pas avoir deux constructeurs avec les mêmes paramètres. Le compilateur ne saura pas lequel à appeler lorsque vous souhaitez appeler quelque chose comme ceci: Nouvelle personne ("Joe Blow");

Vous pouvez faire quelque chose comme ça à la place: < Pré> xxx

le " ceci () " Dans votre dernier constructeur ne dit que ce constructeur d'appeler le constructeur par défaut dans le cadre du processus de construction de l'objet. Il ne crée pas deux objets, il exécute simplement le code dans le def. constructeur, qui dans votre cas ne fait rien.


2 commentaires

Bonne réponse. Cependant, pourquoi ne pas aller à la voie inverse avec ceci (chaîne, "") (voir ma réponse)?


Oui, c'est un bon point +1 pour votre réponse. Les constructeurs les plus généraux appellent-ils les plus spécifiques.



4
votes

Quelque chose à penser si - voulez-vous créer un objet de personne qui n'a pas de nom ni d'adresse? Si vous ne le faites pas, pourquoi offrir ces constructeurs (pas que vous pouvez quand même, ils ont les mêmes paramètres, le compilateur ne peut-il pas les différencier)? Je penserais que chaque personne aurait un nom. Peut-être que quelqu'un n'aurait pas d'adresse.

Pensez à votre objet avant de créer vos constructeurs. P>

Une autre possibilité est la suivante: p>

public class Person {

    private String name;
    private String address;

    Person(String name) {
        this(name, "");
    }

    Person(String name, String address) {
        this.name = name;
        this.address = address;

        // TODO - Other initializations.
    }
}


0 commentaires

0
votes

Cela appelle la personne () mais deux objets ne sont pas créés.


0 commentaires

1
votes

Utiliser des méthodes d'usine pour construire cet objet

public class Person {

    private String name;
    private String address;

    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }

    public static Person createHomelessPerson ( String name )
    {
        return new Person( name, null );
    }

    public static Person createNamelessPerson ( String address )
    {
        return new Person( null, address );
    }
}


0 commentaires