Je suis actuellement en train d'apprendre un polymorphisme en Java et une partie de la mission consistait à créer un programme imprimer diverses sous-classes en utilisant l'héritage et le polymorphisme. J'ai essayé de chercher des solutions, mais je ne pouvais pas sembler trouver quelqu'un d'autre que ce problème.
ci-dessous est un morceau de code qui est censé imprimer J'ai essayé de déboguer en entrant à l'aide d'Eclipse, mais je ne peux pas identifier ce qui est l'erreur. Je suis vraiment excitée à ce stade, j'ai essayé cette question de la semaine dernière, mais sans être disponible. S'il vous plaît, pardonnez-moi s'il s'agit d'une question simple mais je ne peux pas comprendre ce qui s'est mal passé. J'apprécierais vraiment toute aide! P> alex code> et alexa code > respectivement. Cependant, la sortie est, à la place, alexa code> alexa code>. P> import java.util.ArrayList;
public class Human {
protected static String name;
public Human(String name) {
System.out.println("In human constructor");
this.name = name;
}
void greetings() {}
static void print(Human human) {
System.out.println(name);
}
public static void main(String[] args) {
ArrayList<Human> human = new ArrayList<Human>();
human.add(new Man("Alex"));
human.add(new Woman("Alexa"));
for (int i = 0; i < human.size(); i++) {
print(human.get(i));
}
}
}
class Man extends Human {
public Man(String name) {
super(name);
// TODO Auto-generated constructor stub
}
}
class Woman extends Human {
public Woman(String name) {
super(name);
// TODO Auto-generated constructor stub
}
}
4 Réponses :
Faites des recherches sur le contexte statique. Voici une partie de votre problème:
public class Test {
public static void main(String[] args) {
Human human = new Human("Steve");
System.out.println(human.getName());
}
}
class Human {
private String name;
Human(String s) {
this.name = s;
}
public String getName() {
return this.name;
}
}
Cela ne fera que fixer une partie du problème ...
Vous vous trompez, il n'imprimera pas les noms corrects. Essayez-le ...
nom code> sera null code> ...
@ BRSO05 whoops, je pensais humain code> était un pojo mais il contient le principal code> - je suis corrigé.
Chaque humain a son propre nom, peu importe si l'homme ou la femme.
alors retirez le mot clé statique de p>
Cela ne fera que fixer une partie du problème ...
Ceci est parce que vous avez défini Lors d'une variable, une méthode, ... est définie Regardez sur Ce lien pour plus d'informations. P> P> nom code> en tant que champ statique. Donc, dans chaque objet, il aura la même valeur. Il suffit de supprimer le statique code> du nom. statique code>, vous pouvez avoir accès à il sans créer des objets. En attendant, il aura la même valeur dans chaque objet. Donc, si vous modifiez une variable statique, il conservera la dernière modification. P>
Cela ne fera que fixer une partie du problème ...
Il y a quelques choses mal ici:
Vous imprimez le mauvais nom nom code> ne doit pas être statique. Vous souhaitez une instance de nom code> pour chaque instance (objet) créée. P> li>
code>. Vous souhaitez imprimer le nom code> de l'instance passée dans Imprimer () code>. Donc, vous voudriez quelque chose comme ça (vous créeriez une méthode getter pour nom code>): p> li>
OL> static void print(Human human) {
System.out.println(human.getName());
}
Pourquoi passeriez-vous un humain code> à elle-même pour vous imprimer? Pourquoi ne voudriez-vous pas simplement faire void print () {system.out.println (ce nom)} code> et l'appelez avec yourhuman.print () code>? La façon dont vous l'avez maintenant, ce n'est pas statique code> pour que vous exigeiez une instance de humain code> pour imprimer un différent i> humain code> ce qui n'a aucun sens. Soit avoir statique code> avec un paramètre humain code> ou le fait pas statique code> sans paramètre
@NExevis vous êtes correct
Retirez le nom statique de la chaîne statique protégée;
Une variable code> statique code> n'appartient pas à une instance spécifique; Il est plutôt courant pour toutes les instances. C'est pourquoi vous avez changé de valeur chaque fois que sa valeur sera modifiée pour toutes les instances.
@Arvind Kumar Avinash Merci pour la clarification!