Je pense que la bonne manière de voir ton probleme, si l'heritage est obligatoire, c'est par "contrainte".
Tu as ta classe Point.
Tu as ta classe Polygone.
I/ Polygone
-------------
Pour moi, un Polygone n'EST PAS un point. Un polygone CONTIENT DES POINTS.
Donc ta classe Polygone aura comme attributs une structure de donnée qui contiendra tes points. (de taille variable).
Tu peux envisager comme constructeur pour Polygone de prendre un entier décrivant le nombre de points qui vont définir ce polygone, et les-dits points en deuxième argument (dans la structure de donnée qui te convient).
II/ Quadrilatère
------------------
Tu peux alors maintenant créer une classe Quadrilatère, qui hériterait de Polygone.
Et là c'est correct, car un Quadrilatere EST un polygone.
Pour le constructeur de Quadrilatere, tu peux donc obliger de recevoir 4 couples couples décrivant tes points, et tu te contente d'appeler super(4, TonConteneur(couple1, couple2, couple3, couple4).
III/ Parrallélogramme
----------------------
Ensuite tu peux immaginer Parrallélogramme.
Un Parrallélogramme EST BIEN un Polygone, et c'est meme un Quadrilatere pour être plus précis.
Parrallélogramme va donc hériter de Quadrilatere.
Là, il va falloir fixer deux contraintes : les cotés opposés sont parallèles.
Comment obliger un Quadrilatère à être un Parrallélogramme, tout en garantissant qu'il n'y aura qu'UN Parrallélogramme représentable ?
Une idée serait de fournir trois points. Avec trois points, tu définis UN ET UN SEUL Parallélogramme. (fais des dessins pour le voir).
Le quatrième point peut donc etre calculé avec les trois premiers.
Tu peux donc créer un constructeur de Parrallélogramme qui :
- Prend trois couple (x,y) en entrée : couple1, couple2, couple3.
- Calcule le quatrieme couple : couple4, à partir des trois premiers.
- Appel super(couple1, couple2, couple3, couple4).
// Rappel : on hérite de Quadrilatere, qui attend 4 couples.
Et ainsi de suite tu pourrais rajouter différentes structures.
Attention pour l'heritage à toujours bien se demander si l'objet dérivé EST UN "nom_de_la_classe_supérieur", mais spécialisé.
Si il CONTIENT UN/DES machins, machins sera plutot un attribut.
J'espère avoir pu t'aider un peu.
Si tu as des questions, ou si j'ai dis des bétises, n'hesitez pas à me dire ce qui ne va pas.