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

Langage Java Discussion :

probleme heritage overriding


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Par défaut probleme heritage overriding
    Bonjour tout le monde,

    je voudrais comprendre pourquoi le code suivant écris "5" et pas "6"...
    Pour ma part, dans la main, t.getObject retourne une instance de B1, et x de B1 vaut 6.
    Merci pour tous vos réponses!

    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
    class A1 {
    	public int x=5;
    }
    class B1 extends A1{
    	public int x=6;
     
    }
    public class test{
    	public int x=0;
    	public A1 getObject(){
    		return new A1();
    	}
    	public static void main(String[] args) {
    		test t=new testT();
    		System.out.println(t.getObject().x);
    	}
    }
    class testT extends test{
    	public B1 getObject(){
    		return new B1();
    	}
    }

  2. #2
    Membre Expert
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Par défaut
    Salut, je vais essayer d'être clair : en fait c'est tout à fait normal que tu obtiennes 5. En effet, tu déclares t comme étant de type test
    même si tu l'initialises par un new testT()
    Ce qui fait que ton objet t est considéré comme un objet de type test ; d'où le 5.

    Si tu remplaces ton instanciation par
    alors tu obtiendras 6

    Bon développement

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Il n'y a pas d'overriding sur les attributs !


    Ta classe B1 possède donc deux attributs différents : A1.x et B1.x qui valent respectivement 5 et 6.

    Ainsi donc ton code, puisque t est du type test, tu accèdes forcément à A1.x, puisque l'accès aux attributs est déterminé à la compilation...


    Pour obtenir le résultat que tu souhaites tu doit utiliser des méthodes accesseurs, dont l'appel est déterminé à l'exécution selon les règles de l'overriding et le type réel de l'objet...



    a++

Discussions similaires

  1. Probleme Heritage = StackOverflowError
    Par Shifty_ dans le forum Langage
    Réponses: 6
    Dernier message: 27/11/2007, 15h49
  2. probleme heritage dans 1 MCD
    Par User dans le forum Schéma
    Réponses: 5
    Dernier message: 25/04/2007, 13h39
  3. Probleme heritage (debutant)
    Par pouic06 dans le forum Débuter
    Réponses: 11
    Dernier message: 18/11/2006, 07h41
  4. Probleme heritage : References sur la table parente
    Par Belgar dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 03/05/2005, 22h11
  5. probleme heritage en C#
    Par roninou dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/04/2005, 19h12

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