Rechercher : dans
Par :

Héritage multiple en java: incompréhensible

Dernière réponse le 12 jun 2008 à 21:30:49 omar, le 26 sep 2003 à 09:41:05 
 Signaler ce message aux modérateurs

Bonjour!!
Prenom un exemple soit

l'interface danseur avec les méthodes:

-danse();


et la classe chanteur avec la méthode
-chante();



soit une nouvelle classe appelé (une peu d'humour!)
michaekjacskon qui :
- hérite de la classe chanteur
- implémente l'interface danseur

l'intérêt de 'lheritage c déviter entre autre de réécrire du code et de bénéficier du code des méthodes déjà définies.

Ce dont je ne vois pas l'interet ce que michaeljackson implémente la classe danseur vu que je serais obligé de rédéfinir tts ces méthodes.


donc si j'avait fais hériter Michael jacksons seulement de la classe chanteur et que je ré-' écrit les mêmes méthodes abstraites de la classe danseur j'obttiens le même résultat : j'écris autant de ligne de code.


dou ma question quel est l'intert des interfaces vu que je peux obtenir le meme résultat sans spécifier que j 'hérite de cette interface et qu'elle ne m 'apporte aucune aide si ce n'est d'être obligé de redéfinir tt ces méthodes.
d'ou ma ?.

Merci d'avance!!

Meilleures réponses pour « héritage multiple en java: incompréhensible » dans :
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Java - L'héritage VoirLa notion d'héritage Le concept d'héritage est un des concepts les plus importants de la programmation orientée objet, car il conditionne irréversiblement la façon selon laquelle un code Java est écrit. L'héritage est un mécanisme permettant de...
POO - Héritage VoirLa notion d'héritage L'héritage (en anglais inheritance) est un principe propre à la programmation orientée objet, permettant de créer une nouvelle classe à partir d'une classe existante. Le nom d'"héritage" (pouvant parfois être appelé dérivation...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...

1

choubaka, le 26 sep 2003 à 10:06:50

Salut

c'est justement la grande force de la programmation orientée objet...

Java ne supporte pas le multiple héritage (comme le C++ par exemple qui lui le permet).

Pour pallier à ce petit problème, on utilise les interfaces..

Celà permet de définir éventuellement un autre comportement que les membre d'une même famille de la classe..

les interfaces contiennent effectivement des méthodes non implémentées. On peut dire en fait qu'une classe qui implémente une interface, signe une sorte de contrat avec les autres objets suscpetible de faire appel à elle. Ce contrat est simple, il s'agit d'utiliser une signature de méthode "générique" et surtout de renvoyer le résultat (si il y en a) sous un format bien défini). Ce qui veut dire que tous les objets qui implémentent une interface, signent le même contrat.

prenons un exemple

une entreprise...

il existe une superclasse Abstraite Employé... cette classe pour simplifier possède une méthode abstraite public void bosse() qui ne contient pas de code. en effet, en fonction de leur travail spécifique le code sera différent (c'est un peu du polymorphisme ça...). Cette classe posséde une autre méthode public void pointe() qui elle possède du code parceque tous les employés pointe leurr arrivée au boulot de la même manière..

Toutes les instances d'Employé hériteront donc de la méthode pointe() mais devront définir le corp de la méthode bosse...

Cependant certains employés auront en plus une fonction de commandement, les chefs... qui eux en plus des autres doivent "commander".

Pour réussir ce challenge, les employés chefs vont implémenter une interface (l'interface TheBoss qui contient une méthode non implémenté public void dirige(). Il est clair que chaque chef dirige en fonction de son rang dans la hiérarchie et que le corps de la méthode sera différent pour chaque chef..

pigé?






ChoubaPostor 10000 :
Le plus bô des modos.

Répondre à choubaka

2

Charly0, le 10 jan 2008 à 15:32:49

Bonjour Omar,

Tu as tout à fait raison, dans ton cas Java ne permet aucune solution évidente puisque tu es obligé de rédéfinir soit la fonction 'danse' soit la fonction 'chante', ce qui augmente considérablement le travail. Java n'autorise pas l'héritage multiple (et contrairement à ce que l'on peut lire un peu partout, les interfaces ne permettent pas de faire d'héritage multiple mais autorisent seulement un cas particulier pour les classes abstraites) et, si tu as besoin de ce type de fonctionnalités, je te conseille de t'orienter sur du C++, qui sera beaucoup plus puissant.

Sinon, une bidouille (mais qui rajoute aussi du boulot) :
Tu crées deux interfaces : IChanteur et IDanseur, puis deux classes Chanteur et Danseur implémentant IChanteur et IDanseur.
Ensuite pour ta classe Jackson, tu lui fais implémenter les interfaces IChanteur et IDanseur et (c'est toute l'astuce) pour ne pas réécrire ton code, tu places deux données privées 'c' et 'd' respectivement de type Chanteur et Danseur et tu appelles leurs méthodes dans les définitions des fonctions de IChanteur et IDanseur de la classe Jackson. C'est nul et pas performant mais je n'ai pas encore trouvé d'autre solution.

Charly

Répondre à Charly0

3

meriem, le 30 jan 2008 à 16:32:48

Svp je veux une implementation de la classe employe en language c++,
cette classe gère +ieurs employés ds une entreprise,
merci pour votre aide.

Répondre à meriem

4

Pouce, le 10 jun 2008 à 00:02:29

C'est marrant comme les "Je veux" ont toujours autant de succès !

Répondre à Pouce

5

assia, le 12 jun 2008 à 12:52:08

Salut omar ds cet exemple tu vois pas bien l'utilité des interfaces mais si on prends par exemple une interface qui s'appelle forme geometrique qui a des methodes abstraites surface ,perimetre... quand on veut construire une classe rectangle ou cercle...ils ont tous ces proprietés dc on les implementes facilement

Répondre à assia

6

assia, le 12 jun 2008 à 13:01:59

J'ai un exercice pour calculer la somme et le produit de de complexe et je l'ai resolu comme ça:
import java .io.*;
public class complexe {
float reel,img;
complexe(float a,float b){
this.reel=a;
this.img=b;
}
public static complexe somme(complexe r,complexe i){
float c;
float d;
c=r.reel+i.reel;
d=r.img+i.img;
complexe com =new complexe(c,d) ;
return com;
}
public static complexe produit(complexe r,complexe i){
float e;float f;
e=(r.reel*i.reel)-(r.img*i.img);
f=(r.reel*i.img)+(r.img*i.reel);
complexe comp =new complexe(e,f);
return comp;
}
public static void main(String[] args) throws IOException
{
complexe c1 = null,c2=null;
System.out.println("entrer la partie reel de c1:");
c1.reel=Clavier.saisie_float();
System.out.println("entrer la partie imaginaire de c1:");
c1.img=Clavier.saisie_float();
System.out.println("entrer la partie reel de c2:");
c2.reel=Clavier.saisie_float();
System.out.println("entrer la partie imaginaire de c2:");
c2.img=Clavier.saisie_float();
System.out.println("la somme est:"+somme(c1,c2));
System.out.println("le produit est:"+produit(c1,c2));
}
}
mais le compilateur me leve une exception comme suit:
Exception in thread "main" java.lang.NullPointerException
quelle est la solution svp
answer me as soon as you can plz

Répondre à assia

7

 Marco la baraque, le 12 jun 2008 à 21:30:49

Bonsoir,
Si j'étais toi, j'écrirais simplement un constructeur par défaut pour instancier mes variables c1 et c2 au lieu de les déclarer et de ne pas les instancier.

complexe c1 = null;
c1.reel...

ça revient à faire null.reel non ;) ?

Cordialement,

Répondre à Marco la baraque
Collection CommentÇaMarche.net