Heritage - Java

-
Bonjour,

Je voudrais appliquer l’héritage afin que les classes Cercle et Carré héritent à la fois de Forme et Resizable.
Merci d'avance!

voici le code :
**Modifié par la modération pour une lecture plus facile du code, à l'avenir utilisez les balises, VOIR CETTE PAGE
public class Cercle {
    
    double diametre = 0;
    
    public Cercle(double taille) {
        this.diametre = diametre;
    }
    
    public double getPerimeter() {
        return  Math.PI * diametre;
    } 
    
    public void resize(double diametre) {
        this.diametre = diametre
    }
    
}

public class Carre {
    
    double taille = 0;
    
    public Carre(double taille) {
        this.taille = taille;
    }
    
    public double getPerimeter() {
        return taille*4;
    } 
    

     public void resize(double taille) {
         this.taille = taille;
     }
    
}

public abstract class Resizable {
    
    public abstract void resize(double d);
    
}

public abstract class Forme {
    
    public abstract double getPerimeter();
}

**Modifié par la modération pour une lecture plus facile du code, à l'avenir utilisez les balises, VOIR CETTE PAGE

.
Afficher la suite 

1 réponse

Messages postés
13952
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 novembre 2019
417
0
Merci
Bonjour

Pour tes prochains posts, merci de lire et appliquer ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Je ne suis pas spécialiste en java, j’ai donc vérifié avant de te répondre.
Il n’y a pas d’héritage multiple en Java, il faut utiliser au moins une interface.
Dans ton cas, forme et resizable peuvent sans problèmes être toutes 2 des interfaces car elles n’ont aucun code.
Whismeril
Messages postés
13952
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 novembre 2019
417 -
Le fait qu’il n’y a pas d’héritage multiple
KX
Messages postés
16072
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 novembre 2019
2450 > Whismeril
Messages postés
13952
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 novembre 2019
-
Un des postulats de base de Java était de ne pas reprendre les concepts du C++ qui amenaient de la confusion. L'héritage multiple en fait partie, de même que les pointeurs, ou les surcharges d'opérateurs.

Toutefois on peut faire de l'héritage multiple en Java, via les interfaces.
Mais c'est de l'héritage multiple de code, pas d'objets.

Exemple :
interface AB {
    default String a() {
        return "AB.a";
    }

    default String b() {
        return "AB.b";
    }
}

interface AC {
    default String a() {
        return "AC.a";
    }

    default String c() {
        return "AC.c";
    }
}

interface X extends AB, AC {
    @Override
    default String a() {
        return AB.super.a(); // ou AC.super.a() ou autre
    }
}

À la compilation, Java plantera si l'interface X ne surcharge pas la méthode a() car il ne saura pas s'il faut prendre la version de AB (ce que j'ai fait), celle de AC, ou autre chose.
En revanche dans X la méthode b() sera celle de AB et la méthode c() sera celle de BC.
Whismeril
Messages postés
13952
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 novembre 2019
417 -
Ok, je ne savais pas qu’il n’y a pas de surcharge d’opérateur
merci pour les interventions et désolé d'avoir dépose mon code un peu en désordre.
je voulais savoir, elle se passe à quel niveau la communication entre tes interface et classes?
KX
Messages postés
16072
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 novembre 2019
2450 > TOTO25 -
Il n'y a pas de "communication" entre les interface et les classes. C'est juste du code.
L'objet que tu manipuleras possédera toutes les propriétés de ses interfaces et classes parentes comme si tout le code avait été écrit pour lui, il n'a pas besoin de communiquer avec qui que ce soit pour y accéder, ça appartient à l'objet.
Commenter la réponse de Whismeril