2010-01-09 8 views
15

Doublons possibles:
Cheat single inheritance in Java !!
Why is Multiple Inheritance not allowed in Java or C#?
Multiple Inheritance in java.Comment hériter de plusieurs classes de base en Java?

Je sais que nous pouvons utiliser des interfaces pour hériter de plusieurs classes, mais est-il possible d'hériter de l'état aussi bien?
Comment puis-je hériter des méthodes avec des définitions de 2 classes et les avoir dans une troisième classe en Java?

+0

Copies possibles: http://stackoverflow.com/questions/1262447/multiple-inheritance-in-java, http://stackoverflow.com/questions/1038314/alternative-of-multiple-inheritance-in-java, http://stackoverflow.com/questions/995255/why-is-multiple-inheritance-not-allowed-in-java-or-c, http://stackoverflow.com/questions/70537/cheat-single-inheritance- In-Java, etc, etc. –

+0

Ces autres questions ne sont pas des doublons IMO. Ces questions demandent * pourquoi * il n'y a pas d'héritage multiple. Cette question demande comment contourner le problème - avec des réponses appropriées à condition que les autres questions ne fournissent pas. – HDave

Répondre

23

Réponse courte: Vous ne pouvez pas. Java a seulement plusieurs héritages d'interfaces.

Légèrement plus Réponse: Si vous vous assurez que les méthodes que vous aimez sont dans les interfaces, alors vous pouvez avoir une classe qui implémente les interfaces, puis les délégués aux instances des « super classe »:

interface Noisy { 
    void makeNoise(); 
} 


interface Vehicle { 
    void go(int distance); 
} 

class Truck implements Vehicle { 
    ... 
} 

class Siren implements Noisy { 
    ... 
} 

class Ambulance extends Truck implements Noisy { 
    private Siren siren = new Siren(); 

    public makeNoise() { 
    siren.makeNoise(); 
    } 

    ... 
} 
2

Java interdit explicitement l'héritage multiple de l'implémentation. Il vous reste à utiliser les interfaces et la composition pour obtenir des résultats similaires.

+0

Qui Laurence a fourni un bon exemple de :) –

3

Vous ne pouvez pas, Java ne prend pas en charge l'héritage multiple. Ce que vous pouvez faire est la composition.

25

L'héritage multiple n'est pas autorisé en Java. Utilisez les délégués et les interfaces au lieu

public interface AInterface { 
     public void a(); 
} 
public interface BInterface { 
    public void b(); 
} 

public class A implements AInterface { 
    public void a() {} 
} 
public class B implements BInterface { 
    public void b() {} 
} 

public class C implements AInterface, BInterface { 
    private A a; 
    private B b; 

    public void a() { 
     a.a(); 
    } 
    public void b() { 
     b.b(); 
    } 
} 

Depuis Java 8, il est possible d'utiliser Default Methods dans les interfaces.