IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

polymorphisme et héritage en java


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 212
    Points : 23
    Points
    23
    Par défaut polymorphisme et héritage en java
    Bonsoir,
    J'ai un problème que je n'arrive pas à résoudre en fait j'ai une classe personne et deux sous classes fils teacher et Student. une 3 ème classe université qui contient un tableau qui contient 3 teachers et 3 student puis je veux afficher les détails du tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    package test;
     
    public abstract class Person {
    	protected String name;
    	protected int age;
    	public Person(String n, int a){
    		name=n;
    		age=a;
     
    	}
    	public String getName(){
    		return name;
    	}
    	public int getAge(){
    		return age;
    	}
    	public void setName(String n){
    		name=n;
    	}
    	public void setAge(int a){
    		age=a;
    	}
    	public abstract void print();
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    package test;
     
    public class Teacher extends Person {
    private float salary;
    public Teacher(String n, int a, float s){
    	super(n,a);
    	salary=s;
    }
    public float getSalary(){
    	return salary;
    }
    public void setSalary(float s){
    	salary=s;
    }
    public void print(){
    	name=getName();
    	age=getAge();
    	System.out.println("The name of Teacher is "+name+"\n"+" the age of the teacher is  "+ age+"\n"+"The salary of the teacher is "+salary);
     
    }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package test;
     
    public class Student extends Person {
    	private int id;
    	public Student(String name,int age, int id){
    		super(name,age);
    		this.id=id;
    	}
    	public int getId(){
    		return id;
    	}
    	public void setId(int i){
    		id=i;
    	}
    	public void print(){
    		System.out.println("The name od the student is "+name+"\n"+"The age of the student is "+age+"\n"+"The id of the student is "+id);
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class University {
    	Person tab[];
    	int size_tab;
    	int n=0;
    	public University(int size, int x){
    		size_tab=size;
    		n=x;
    		tab=new Person[size_tab];
     
    	}
    	public int addPerson(Person p){
    		System.out.println("n= "+n);
    		tab[n].name=p.name;
    		tab[n].age=p.age;
    		System.out.println("Person "+ tab[n]);
    		n++;
    		return n;
     
     
    	}
    	public void PrintAll(){
    		for (int i=0;i<n;i++){
    			System.out.println(tab[i]);
    		}
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    package test;
     
    public class Principal {
    	public static void main(String []args){
    		Teacher t1=new Teacher("Boutheina",32,9000);
    		Teacher t2=new Teacher("Abir",29,3500);
    		Teacher t3=new Teacher ("Asma",25,5000);
    		Student s1=new Student("Aicha",20,12345);
    		Student s2=new Student("Meriem",21,45678);
    		Student s3=new Student ("Zeineb",19,78912);
    		University u=new University(7,6);
    		u.addPerson(s3);
    		u.addPerson(s2);
    		u.addPerson(s1);
    		u.addPerson(t3);
    		u.addPerson(t2);
    		u.addPerson(t1);
    		u.PrintAll();
    	}
     
    }
    cet erreur est affiché:
    Exception in thread "main" java.lang.NullPointerException
    at test.University.addPerson(University.java:15)
    at test.Principal.main(Principal.java:12)

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Hello,

    rien à voir avec l'héritage ni le polymorphisme.

    Quand on crée un nouveau tableau, il est vide. Il a la taille qu'on lui donne, oui, mais toutes les cases sont vides.
    Toi dans ce code, tu crées un nouveau tableau de taille 7, et donc tu te retrouves avec un tableau de 7 cases, et toutes ces cases contiennent null. Tu devrais vérifier avec ton débuggeur, ou bien en affichant son contenu.

    Du coup quand tu fais tab[n].name=p.name; tu essaies d'accéder au membre "name" de l'objet Person qui se trouve à "tab[n]". Mais à "tab[n]", comme partout ailleurs dans ce tableau d'ailleurs, il n'y a pas d'objet. Il n'y a qu'un pointeur null. D'où, en essayant d'accéder à son membre, une NullPointerException.

    C'est une idée bien étrange que de vouloir modifier les noms et âges contenus dans le tableau. Tu passes à ta méthode addPerson() un objet Person que tu veux ajouter à l'université. Mets cet objet dans le tableau, ni plus ni moins. Qu'est-ce que c'est que cette histoire d'aller regarder son nom et son âge, tu es de la police ou quoi ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 212
    Points : 23
    Points
    23
    Par défaut
    Bonjour,
    en fait c'est l'énoncé de l'exercice qui est comme ça donc je ne suis pas de police.
    en plus moi j'ai une classe personne et deux sous classes student et teacher qui héritent de la classe mère(Personne) mais aussi qui ont leurs propres attributs.
    ensuite il y a une troisième classe université qui contient un tableau de personne, mais ces personnes peuvent etre des teachers ou student (je pense dans cette classe que je vais utiliser le polymorphisme ) et donc l'affichage sera différent selon la type de personne et ceci mon problème

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par boutheinanabeul Voir le message
    en fait c'est l'énoncé de l'exercice qui est comme ça
    J'en doute. Tu peux le prouver ? (Ou juste le relire et constater que non, il n'est pas spécialement question de s'intéresser au nom ni à l'âge d'une Person qu'on ajoute avec addPerson().)

    Citation Envoyé par boutheinanabeul Voir le message
    en plus moi j'ai une classe personne et deux sous classes student et teacher qui héritent de la classe mère(Personne) mais aussi qui ont leurs propres attributs.
    ensuite il y a une troisième classe université qui contient un tableau de personne, mais ces personnes peuvent etre des teachers ou student (je pense dans cette classe que je vais utiliser le polymorphisme ) et donc l'affichage sera différent selon la type de personne et ceci mon problème
    Certes. Mais rien de tout cela n'a le moindre rapport avec l'erreur que tu obtiens, la NullPointerException.
    Tu l'obtiens parce que tu essaies d'utiliser un pointeur null.
    Parce que tu crées un tableau de Person[] sans rien mettre dedans, et après tu essaies de définir un nom et un âge à ces personnes qui ne sont pas dans le tableau. Ce qui ne peut pas marcher.

    Rien à voir donc, avec le sujet de l'héritage ni du polymorphisme, ni de quoi que ce soit d'autre que savoir que quand on crée un tableau, il ne contient que des cases vides. Et que donc, ce n'est pas comme cela que l'on procède.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 212
    Points : 23
    Points
    23
    Par défaut
    exactement ceci est le problème et j'arrive pas à comprendre pour quoi le tableau reste vide. bon j'ai quelques modifications à mon programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    package test;
     
    public class University {
    	Person tab[];
    	int size_tab;
    	int n=0;
    	public University(int size, int x){
    		size_tab=size;
    		n=x;
    		tab=new Person[size_tab];
     
    	}
    	public void addPerson(Person p){
     
     
    		tab[n]=p;
    		n=n+1;
     
     
     
    	}
    	public void PrintAll(){
    		for (int i=0;i<n;i++){
    			tab[i].print();
     
    		}
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    package test;
     
    public class Principal {
    	public static void main(String []args){
    		Teacher t1=new Teacher("Boutheina",32,9000);
    		Teacher t2=new Teacher("Abir",29,3500);
    		Teacher t3=new Teacher ("Asma",25,5000);
    		Student s1=new Student("Aicha",20,12345);
    		Student s2=new Student("Meriem",21,45678);
    		Student s3=new Student ("Zeineb",19,78912);
    		University u=new University(100,6);
    		u.addPerson(s3);
    		u.addPerson(s2);
    		u.addPerson(s1);
    		u.addPerson(t3);
    		u.addPerson(t2);
    		u.addPerson(t1);
    		u.PrintAll();
    	}
     
    }
    et malgré ça l'erreur persiste

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    Ta boucle parcours les éléments allant de 0 à 100 éléments, or les 5 premières cases de ton tableau n'ont aucun élément( donc à null). Il suffit de passer au constructeur University 0 pour commencer à remplir le tableau depuis l'indice 0:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    package test;
     
    public class Principal {
    	public static void main(String []args){
    		Teacher t1=new Teacher("Boutheina",32,9000); 
    		Teacher t2=new Teacher("Abir",29,3500);
    		Teacher t3=new Teacher ("Asma",25,5000); 
    		Student s1=new Student("Aicha",20,12345);
    		Student s2=new Student("Meriem",21,45678);
    		Student s3=new Student ("Zeineb",19,78912);
    		University u=new University(6,0); // tableau de 6 éléments
    		u.addPerson(s3); //1er élément à l'indice 0
    		u.addPerson(s2);
    		u.addPerson(s1);
    		u.addPerson(t3);
    		u.addPerson(t2);
    		u.addPerson(t1); //6ème élément à l'indice 5
    		u.PrintAll();
    	}
     
    }
    juste une remarque: le constructeur University n'a pas besoin d'un second paramètre, un seul paramètre ( size) suffit

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 212
    Points : 23
    Points
    23
    Par défaut
    merci beaucoup pour votre réponse donc juste petite faute qui a causé ça et le problème que je n'ai pas pu trouvé toute seule merci beaucoup

Discussions similaires

  1. Polymorphisme et héritage en Java
    Par mooie dans le forum Général Java
    Réponses: 3
    Dernier message: 06/12/2012, 18h43
  2. Héritage en java
    Par caro_caro dans le forum Langage
    Réponses: 1
    Dernier message: 07/03/2008, 10h18
  3. Héritage / Covariance / Java 5
    Par Akira dans le forum Langage
    Réponses: 3
    Dernier message: 08/05/2007, 18h22
  4. polymorphisme d' héritage
    Par loacast dans le forum C++
    Réponses: 3
    Dernier message: 30/01/2007, 11h13
  5. Generics et héritage avec Java 5.0 Tiger
    Par euyeusu dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2007, 11h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo