Interface VS héritage....

Interface VS héritage.... - Java - Programmation

Marsh Posté le 26-02-2006 à 20:09:19    

Salut tout le monde. Bon je suis en train de bosser du Java ( donc oui, je uis encore un newb' ) et je me pose quelques questions à propose de l'héritage et des interfaces...
Si j'ai bien tout compris, l'héritage permet d'étendre une classe pour lui rajouter des trucs dedans. La classe fille prend tout de la classe mere ( sauf les constructeurs, dans ce cas là on fait un appel a super() ).
L'interface ( bon là j'ai un doute hein ), permet d'imprémenter une classe a partir d'une nouvelle, sauf que la premiere c'est pas une classe mais une interface.
 
Donc dans les 2 cas, l'interface ET l'héritage permettent d'étendre une classe déjà existante... donc la question logique qui en découle est: Pourquoi on à deux solutions pour faire en gros le meme boulot ? et si c'est pas le meme boulot, c'est quoi la difference entre les deux alors ? :??:  :??:  :??:  
 
 
 
Ensuite une petite question facultative pour les plus courrageux: la surcharge, c'est quand on redéfinit une methode dans une classe hérité, alors qu'elle existait déjà dans la classe mere. On dit qu'il y a surcharge ( de la 1ere méthode ), j'ai bon ?  
 
 
Bon je sais que c'est des questions de débutant et qu'il y a des topics débutant, mais c'est super chaud de tout comprendre, des fois on a besoin d'un peu d'explications, surtout moi qui suis loin d'etre un einstein... :sweat:  
 
en tout cas merci a vous  :jap:

Reply

Marsh Posté le 26-02-2006 à 20:09:19   

Reply

Marsh Posté le 26-02-2006 à 20:21:29    

Une interface n'est pas une extension d'une classe, c'est un contrat.
 
Quand une classe A implémente une interface B, elle s'engage à respecter tout ce qui est définit dans B (en Java, toutes les méthodes définies par B), mais l'interface (ici B) n'implémente rien.
 
Il y a déjà eu un thread là dessus il y a pas longtemps et j'avais posté une explication apparement pas trop mauvaise
 
Voila

tanshiro a écrit :

Ensuite une petite question facultative pour les plus courrageux: la surcharge, c'est quand on redéfinit une methode dans une classe hérité, alors qu'elle existait déjà dans la classe mere. On dit qu'il y a surcharge ( de la 1ere méthode ), j'ai bon ?


On dit que la méthode a été surchargée, ou qu'on a surchargé la méthode, dire "il y a surcharge" n'a pas vraiment de sens.
 
Sinon, oui.
 
Et accessoirement une classe fille hérite des constructeurs de la classe mère si on ne surcharge pas le/les constructeurs.
 
Simplement, habituellement il est impératif de surcharger le constructeur pour initialiser les nouvelles fonctionalités de la classe, et dans ce cas on a besoin d'appeler le constructeur de la classe mère (via super)


Message édité par masklinn le 26-02-2006 à 20:27:09

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 26-02-2006 à 20:22:58    

Avec l'héritage, tu a déjà une classe fonctionelle (sauf si t'hérites du classe abstraite, mais t'as quand même un certain nombre de méthode déjà définie).
 
Quand t'implémentes une interface, tu n'as rien de fonctionnel. Tu implémentes un "patron de classe" qui t'indique ce que t'as à développer  dans ta classe. Une interface permet de définir le comportement de la classe.

Reply

Marsh Posté le 26-02-2006 à 20:29:50    

Merci beaucoup à vous .
Si j'ai uen question qui me turlupine, je la posterai ici aussi... mais vraiment merci

Reply

Marsh Posté le 26-02-2006 à 21:49:57    

Surcharge : un terme bien ambigu, à éviter à mon sens... C'est même un peu un contre-sens.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 04-05-2006 à 12:00:58    

petite question, si une classe herite d'une autre et qu'une methode est surchargée, comment faire pour accéder à la méthode surchargée depuis l'exterieur de l'objet ?
je me demandais si un cast vers l'objet parent et un appel de la méthode appellait la méthode du parent ou toujours la méthode surchargée.

Reply

Marsh Posté le 04-05-2006 à 12:09:23    

ok après une petite recherche apparement on peut pas.
 
A o = new A();
(B)o.m() appelle la methode m() de la classe et pas la classe B.
 
par contre
(B)o.x appelle l'attribut de la classe B et pas celui de A !

Reply

Marsh Posté le 04-05-2006 à 16:34:46    

Citation :

A o = new A();
(B)o.m() appelle la methode m() de la classe et pas la classe B.


 
Non, o.m() appelle la méthode m() de l'objet o et comme l'objet o est une instance de la classe A, cette méthode est celle définie dans la classe A.
 

Citation :

par contre
(B)o.x appelle l'attribut de la classe B et pas celui de A !


De la même façon, on accède à l'attribut x de l'objet o.
 
Ce qu'il faut bien comprendre en langage objet c'est que les données et les traitements sont encapsulés dans l'objet, une fois l'objet instancié il a un ensemble d'attributs et de méthodes fixe

Reply

Marsh Posté le 04-05-2006 à 17:38:41    

si je dis on accede à l'attribut de la classe c'est pour que ce soit clair. Pas la peine d'enculer les mouches ...
 
Lors de la surcharge d'attributs suivant que tu cast ou non, tu peux acceder à deux attributs de nom identiques celui du parent et du fils, mais qui auront des valeurs différentes.
Avec les méthodes surchargées tu peux pas choisir depuis l'exterieur de l'objet à quelle méthodes tu accedes à l'aide d'un cast contrairement aux attributs.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed