Héritage multiple en JAVA [Résolu]

Messages postés
16
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
5 mai 2010
- - Dernière réponse : soukaouta
Messages postés
47
Date d'inscription
vendredi 29 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2012
- 9 avril 2012 à 20:25
Extends, Implements, Interface


Salut,
Considérons deux classes A et B tels que:

public class A {
Attribut_A1;
Attribut_A2;

ConstructeurA(){ Code... }

Méthodes_A1(){ Code... }
Méthodes_A2(){ Code... }
}

Et,

public class B {
Attribut_B1;
Attribut_B2;

ConstructeurB(){ Code... }

Méthodes_B1(){ Code... }
Méthodes_B2(){ Code... }
}

Et maintenant considérons que une calsse C veut hériter des deux classes A et B. On sais que il existe pas l'héritage multiple en java, et on sais que java intoduit ce qu'on appelle INTERFACE... Mais je que je sais pas c'est comment utilisé cette Notion d'interface pour résoudre ce problème d'héritage multiple.

SVP EXPLIQUEZ MOI SOUS FORME D'EXMPLE COMMENT FAIRE POUR QUE LA CALSSE 'C' HERITE DES DEUX CLASSES 'A' ET 'B'.

MERCI.
MedIUM
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
73
3
Merci
Salut,

Il te suffit de faire 2 interfaces :

public interface A {
    Méthodes_A1();  // pas de code
    Méthodes_A2(); // pas de code
}


public interface B {

    Méthodes_B1();  // pas de code

    Méthodes_B2(); // pas de code

}

Deux classes abstraites :
public class AbstractA implements A {
    Attribut_A1;
    Attribut_A2;

    Méthodes_A1() { ... code ... }
    Méthodes_A2() { ... code ... }
}

public class AbstractB implements B {

    Attribut_B1;

    Attribut_B2;


    Méthodes_B1() { ... code ... }

    Méthodes_B2() { ... code ... }
}

et enfin une classe concrète :
public class C implements A, B {
    protected A a = new AbstractA();
    protected B b = new AbstractB();   

   Méthodes_A1() { a.Méthodes_A1(); }
   Méthodes_A2() { a.Méthodes_A2(); }

   Méthodes_B1() { b.Méthodes_B1(); }

   Méthodes_B2() { b.Méthodes_B2(); }
}

Et voilà comment faire de l'héritage multiple en Java tout en limitant la duplication de code.
______________________________________
DarK Sidious

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 135 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
16
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
5 mai 2010
0
Merci
Merci DARKSIDIOUS ..... C'est vraiment ce que je cherche.
Commenter la réponse de miudem
Messages postés
11
Date d'inscription
dimanche 27 janvier 2008
Statut
Membre
Dernière intervention
28 janvier 2011
0
Merci
Malheureusement y a une erreur la dedans , on ne peut pas instancier une classe abstraite :

protected A a = new AbstractA();
protected B b = new AbstractB();

et par conséquent on n'a pas accès aux méthodes de ces classes abstraites sans faire de l'héritage, ( héritage multiple n'est pas permis en java ).


Bonne chance.
Commenter la réponse de zahenianis
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
73
0
Merci
Salut,

Par définition, une classe abstraite est... abstraite : elle n'est pas concrète. Il n'y a donc pas d'intérêt à l'instancier.

Cependant, il est possible de faire une classe anonyme :

protected B b = new AbstractB() {
public void methodeAImplementer() {
// code de la méthode
}
}

C'est vraiment pas joli, mais ca reste possible (c'est le principe des Adapter pour les événements SWING).
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
47
Date d'inscription
vendredi 29 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2012
0
Merci
bonjour,
est il nécessaire de déclarer les classes abstractA et absractB comme classe abstraite,
je ne vois pas pourquoi on les a déclaré ainsi???????
s'il sont des classes normales on peut les instancié et on aura aucun problème par la suite.
Merci
Commenter la réponse de soukaouta