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!