2017-07-16 1 views
1

Je viens juste de commencer à apprendre Java. Dites si vous créez la classe suivante:Modifier la valeur d'une variable statique dans une seule instance (Java)

class FamilyMember { 
    static String lastName = "Doe"; 
    String name; 
    int age; 
} 

Maintenant, vous créez une instance pour une fille, et mettre son nom, disons, Ann, etc. Si elle se marie ou décide de changer son nom de famille, comment vous allez changer seulement la valeur de lastName de son instance et pas la classe entière?

Au début, j'ai essayé de créer deux instances:

FamilyMember john = new FamilyMember(); 
FamilyMember ann = new FamilyMember(); 
ann.lastName = "Stewart"; 

Mais qui a changé toute la classe. J'ai essayé de créer une méthode dans la classe familymember qui fixerait un nouveau nom:

void changeLastName(String newName) { 
    lastName = newName; 
} 

Même essayé d'ajouter « statique » avant vide. Mais tous ceux qui ont simplement changé la valeur pour toute la classe. J'ai trouvé des questions similaires sur le forum mais aucune d'entre elles ne traitait de ce problème particulier.

+0

retirer le '' static' pour lastname' modificateur –

+0

Oui, ce qui rend ce champ 'static' n'a aucun sens. Et ceci: 'J'ai trouvé des questions similaires sur le forum, mais aucun d'entre eux traitant de ce problème particulier. 'N'a aucun sens car ce problème est bien abordé tout au long de ce site et dans la plupart des intro à Java tutoriel. –

+0

@HovercraftFullOfEels Ma mauvaise. Il était difficile pour moi de formuler mon problème en quelques mots sur Google sans un exemple concret, et je n'ai pas bien compris les questions et réponses similaires dans d'autres fils de discussion –

Répondre

0

Mais cela a changé toute la classe.

Exactement vous avez fait de votre nom de famille un membre de classe et non un membre d'instance. Les membres de la classe ne se lient pas avec l'instance. D'où vous voyez le comportement étrange que vous ne voulez pas.

supprimez simplement le statique.

private String lastName = "Doe"; 
0

Vous pouvez supprimer le modificateur statique pour lastname, et si vous souhaitez effectuer une valeur par défaut pour chaque instance qui peut être modifié par la suite, vous pouvez utiliser constructeur multiple pour, ou utiliser setter pour le nom.

par exemple:

class FamilyMember { 
    String lastName; 
    String name; 
    int age; 

    public FamilyMember(final String name, final int age) { 
     this.lastName = "Doe"; 
     this.name = name; 
     this.age = age; 
    } 

    public FamilyMember(final String lastName, final String name, final int age) 
    { 
      this.lastName = lastName; 
      this.name = name; 
      this.age = age; 
    } 

}