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 :

La class extends, un petit problème


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 200
    Points : 73
    Points
    73
    Par défaut La class extends, un petit problème
    Bonjour tous le monde,

    Je commence a rentrer dans le monde Java donc je suis debutant, voila mon sousi:
    merci, de me commenter la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public S(int x, int y, int z){
    qui initialise les variables,
    merci pour votre aide
    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
    package javatest;
     
    public class T {
      //   System.out.println("=====2=====");  
        int r;
        int s;
     
        T(int x, int y){
            r=x;
            s=y;
        }
    }
     
    class S extends T {
        int t;
        public S(int x, int y, int z){
     
            //-------- je veux initialiser mes variables ici, mais je ne vois pas comment!!!  
            //T(x,y);
            //this(x,y);       
            //super(x,y);
            super(x,y,z);
     
            t=z;
     
        }
    }

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu l'a mis toi même entre commentaire, il faut faire


  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 200
    Points : 73
    Points
    73
    Par défaut
    Merci tchize,
    donc mon probleme vient de NetBeans, je recois une erreur de "Error parsing file" malgré que dans le code tous semble parfait.

    une idée?

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Quelle erreur? C'est vague "error parsing". Donne nous ton erreur et ce que tu as mis dans quels fichiers.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 200
    Points : 73
    Points
    73
    Par défaut
    voila l'image de mon petit projet dans netbeans
    j'ai une class main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    package javatest;
     
    public class JavaTest {
     
        int r;
        int s;
     
        public static void main(String[] args) {
            System.out.println("====1======");    
     
        }
     
    }
    qui est suposée appeler la class T
    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 javatest;
     
    public class T {
      //   System.out.println("=====2=====");  
        int r;
        int s;
     
        T(int x, int y){
            r=x;
            s=y;
        }
    }
     
    class S extends T {
        int t;
     
        public S(int x, int y, int z){
     
     
            //T(x,y);
            //this(x,y);       
            super(x,y);
           // super(x,y,z);
     
            t=z;
     
        }
    }
    qui sont dans le meme paquage, mais ca me donne un ! rouge sur la class T
    merci,

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 200
    Points : 73
    Points
    73
    Par défaut
    Salut tchize,

    j'ai un examen a passer la semain prochaine qui va comporter sur :
    Connaissance de la programmation en utilisant les techniques centré-objet (incluant Java).

    as-tu un conseil sur un lien qui va m'enrichir un peu plus?
    merci,

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par machipot Voir le message
    qui sont dans le meme paquage, mais ca me donne un ! rouge sur la class T
    merci,
    Ce qui serait bien c'est le message (tu clique sur le ! pour avoir le message, ou tu laisse le curseur de la souris dessus). Mais je constate déjà que tu met 2 classes dans le même fichier, ce qui est interdit. Les classes doivent être chacune dans un fichier, fichier qui porte le même nom que la classe.
    Citation Envoyé par machipot Voir le message
    as-tu un conseil sur un lien qui va m'enrichir un peu plus?
    merci,
    http://java.developpez.com

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 57
    Points : 93
    Points
    93
    Par défaut
    Tu réussis à faire du code de sagouin même avec un code de quelques lignes . Ne laisse jamais des attributs d'une classe sans "modifier" (public, private etc) !

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par -Dici- Voir le message
    Ne laisse jamais des attributs d'une classe sans "modifier" (public, private etc) !
    Je voudrais préciser: "sauf si la volonté est d'avoir une visibilité par défaut"

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 200
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    de l'aide avec la class suivante, pourquoi b et c ne sont pas initialisés a 8 et 9 alors que a[] l'est a 7?
    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
    public class Spindle {
     
        public static void main(String[] args) {
     
            int[] a = new int[] {1,2,3,4};
            int b = 5;
            int c = 6;
     
            fold.mutilate(a, b, c);
            System.out.println("a= "+a[0]);
            System.out.println("b= "+b);
            System.out.println("c= "+c);           
        }   
    }
     
    class fold{     
           static void mutilate(int[] a, int b, int c){
             a[0] = 7;
             b = 8;
             c = 9;
     
            }      
      }
    resultat après execution:
    a=7
    b=5
    c=6

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Parce que les paramètres des méthodes en java sont passé par copie.

    Pour a c'est une copie de la référence vers le tableau (comme pour tout objet), pour b et c, c'est une copie des valeurs.


    Bref, ce que tu fais dans une méthode n'affecte que la méthode. Vu que tu change le contenu du tableau, sans pour autant changer le tableau, le contenu modifié est visible à l'extérieur. Mais si tu avais créé un nouveau tableau dans la méthode, ça aurait été la même chose que pour b et c, pas d'influence.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 200
    Points : 73
    Points
    73
    Par défaut
    Salut tchize,

    je pensais que les valeurs de b et c ne changent pas c'est parceque la method est static.

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 57
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Je voudrais préciser: "sauf si la volonté est d'avoir une visibilité par défaut"
    Ce qui ne sera jamais aussi clair que de l'écrire explicitement ! Je pense que pour une personne qui sait bien ce qu'elle fait ce n'est pas un problème mais quand on débute il faut être bien rigoureux pour ne pas développer de mauvaises pratiques et typiquement, la visibilité par défaut étant package-private, le fait de ne pas mettre de modifier va permettre, au sens d'un même package, d'accéder à un champ sans passer par un getter, ce qui n'est clairement pas une pratique à conseiller surtout à un débutant.

    On en a l'exemple ici même d'ailleurs, avec des getters/setters il n'y aurait eu aucune chance de confusion entre variable local et attribut d'un objet.

    En ce qui te concerne machipot, le modifier static veut seulement dire que la méthode (ou l'attribut) est lié à la classe et non aux instances de la classe. Entre autre choses, ça implique qu'on doit y référer par MaClasse.attributStatic et non par this.attributStatic ou encore o.attributStatic où o est une instance de MaClasse. Ca implique également que ces méthodes ou attributs ne sont pas hérités par les classes filles éventuelles.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 200
    Points : 73
    Points
    73
    Par défaut
    Merci Dici pour tes explications, mais, tout de même, ça ne repond pas à ma question.
    Le résultat après exécution est :
    a= 7
    b= 5
    c= 6
    Pourquoi a prend la valeur 7 ?
    Par contre b et c restent inchangés (5 et 6) ?
    Merci.

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    @Tchize_ a répondu à cette question : c'est dû à la façon dont les paramètres sont passés de l'appelant (mai) à l'appelé (fold.mutatilate(), (d'ailleurs, ce serait plutôt mutate(), non ?) .

    b et c sont passés par copie : la variables que tu modifies dans la méthode ne sont pas celles qui sont dans le code qui appelle la méthode, qui ne changeront donc pas de valeur, quelque soit ce qui est fait dans la méthode.

    Pour a, c'est pareil : mais a c'est un tableau. Quand tu dis que a change en 7, ce n'est pas tout à fait vrai. C'est a[0] qui prend la valeur 7. Pas le tableau a. Le tableau a est passé par copie et si tu avais fait a=new int[]{10,20,30,40} dans la méthode tu aurais eu ton tableau inchangé dans main(). Par contre, le tableau "pointé" par a, lui, n'est pas une copie : les modifications que tu fais dedans sont récupérable dans main().

    Lorsqu'une variable est de type primitif (non Object, comme un int ou un double), la variable dans l'appelant n'est pas affectée par les changements faits dans la méthode.
    Lorsqu'une variable est de type Object, il s'agit d'une référence sur une instance de classe. Cette référence n'est pas affectée par les changements faits dans la méthode. Mais l'instance "pointée", elle, est affectée par les changements.

    @Dici, te répondait sur ta question sur le sens de static. A l'instar de la méthode main, il s'agit d'une méthode attachée à la classe, pas aux instances de la classe. Tu n'a pas besoin de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fold instance = new fold();
    instance.mutilate(...);
    pour l'appeler. Si elle n'avait pas été static, il aurait fallu écrire ça pour l'appeler (au passage, il y a des conventions de nommage en java, qui permettent de faciliter la lecture de code : entre autres, les noms de classes commencent par une majuscule : public class Fold)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 200
    Points : 73
    Points
    73
    Par défaut
    Joel,

    Merci pour tes explications bien détaillées et je commence à comprendre le principe de référence.
    Oui, aussi pour les conventions Java, le class commencent par une majuscule.

    c'est apprecié
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. La class extends, un petit problème
    Par machipot dans le forum NetBeans
    Réponses: 14
    Dernier message: 04/02/2014, 08h23
  2. Redessiner la classe JMenuItem : petit problème graphique
    Par Janitrix dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/09/2007, 15h55
  3. Java class + Java Bean d'interface = petit problème
    Par Nyphel dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 30/01/2007, 15h52
  4. Réponses: 4
    Dernier message: 15/10/2006, 19h05
  5. [VB.NET]petit problème avec la classe string !!
    Par zouhib dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/06/2006, 12h58

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