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 :

override et type primitif


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Points : 75
    Points
    75
    Par défaut override et type primitif
    Bonjour,

    je m'escrime à comprendre les subtilités de l'override et la covariance

    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
     
    package chap1;
     
    public class Q1f {
    	public int maMethode(){System.out.println("maMethode : superClass ");};
    }
     
    class SubClass extends Q1f{
    	public int maMethode(){System.out.println("maMethode : subClass ");};
    }
     
    class SubSubClass extends SubClass{
    	public char maMethode(){System.out.println("maMethode : subSubClass ");  };
     
    	public static void main (String [] args) {
    		Q1f _1 = new SubSubClass();
    		_1.maMethode();
     
     
    	}
     
    }
    Un char étant plus petit qu'un int (2 octet contre 4), pourquoi on ne peut pas redéfinir la méthode maMethode dasn SubSUbClass comme ci dessus ??

    Merci de vos lumières

    bonne soirée à tous.

  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
    la covariance n'a rien à voir avec la taille, mais avec l'héritage.

    Au dernières nouvelles, char n'hérite pas de int.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Byte ou short n'hérite pas de int ? ( j'ai un vilain doute d'un coup ) pourtant ces types fonctionnent dans ce cas.

  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
    Non, il n'y a pas d'héritage. Ni au niveau des classes faisant le boxing, ni au niveau des type de base de language (qui ne sont pas des classes et donc ne peuvent pas hériter).

    Quand à "ça marche avec byte et short", ce n'est pas ce que dit mon compilateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     public static class A { 
        public int method1(){
           return 0;
        }
     }
     public static class B extends A{ 
        public byte method1(){
           return (byte)1;
        }
     }
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Test.java:8: method1() in Test.B cannot override method1() in Test.A; attempting to use incompatible return type
    found   : byte
    required: int
        public byte method1(){
                    ^
    1 error
    Seul des objets peuvent être utilisé dans la covariance.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    Au temps pour moi, pour le type de retour, ca ne fonctionne pas.
    Et dans le cas suivant :

    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
     
     
    package chap1;
     
    public class Q1f {
    	public void maMethode(int param){System.out.println("maMethode : superClass ");};
    }
     
    class SubClass extends Q1f{
    	public void maMethode(int param){System.out.println("maMethode : subClass ");};
    }
     
    class SubSubClass extends SubClass{
    	public void maMethode(short param){System.out.println("maMethode : subSubClass ");  };
     
     
    }
    S'agit il d'un overide ou d'un overload ? comment savoir ?

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par pigpen Voir le message
    S'agit il d'un overide ou d'un overload ?
    Un overload puisque tu changes le type des paramètres.
    Pour un override les paramètres doivent rester strictement identique

    Citation Envoyé par pigpen Voir le message
    comment savoir ?
    Il suffit d'utiliser l'annotation @Override sur la méthode.
    Si la méthode ne respectent pas les règles de l'override cela génèrera une erreur de compilation


    a++

Discussions similaires

  1. [Débutant] Génériques et types primitifs
    Par Djakisback dans le forum Langage
    Réponses: 16
    Dernier message: 25/05/2006, 11h03
  2. Réponses: 11
    Dernier message: 21/05/2006, 14h39
  3. Réponses: 3
    Dernier message: 07/02/2006, 22h18
  4. [info] passer d'un type primitif a String
    Par soad dans le forum Langage
    Réponses: 3
    Dernier message: 08/05/2005, 13h19
  5. [prog dynamique]Constructeur avec type primitif
    Par -=Spoon=- dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2004, 10h33

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