ouais, bon, pour le 0, je suis assez d'accord, mais bon, si tu peux piger, c'est pas plus mal...
L'explication de DeltaDen est pas mal, mais manque de pr"cisions, je trouve : une interface, ça définit un ensemble de méthodes, que DOIVENT implémenter les classes qui implémentent l'interface. Par contre, on peut faire appel à ces méthodes, par l'intermédiaire de l'interface, sans connaître la classe de l'objet qu'on manipule.
Par exemple, une interface shape, pour reprendre ton exemple...
Une forme géométrique, c'est très variable, ça peut être un carré, un rectangle, un cercle, etc..Par contre, chacune de ces formes a une aire, un périmètre, une façon d'être dessinée, etc..
Donc, pour faire un logiciel de dessin, par exemple, tu définis une interface shape, avec la méthode draw(graphics)
Ensuite, tu implémente la méthode dans chaque classe : dans Carre, la méthode dessine un carré, dans Rectangle, ça dessine un rectangle, etc...
Au moment de dessiner l'interface de ton programme, au lieu de dire "je dessine les carrés, puis les cercles, puis les rectangles" tu dis "je dessine les formes" , et ça se fait en appellant draw() sur chacun des objets définis....
au lieu de faire 3 boucles sur 3 ensembles d'objets, tu n'en fait qu'une...Bon, c'est un avantage basique et purement gratuit, mais ce n'est qu'un exemple.
Ensuite, une classe abstraite, c'est comme une interface, mais ça définit en plus, des comportements commune à tes objets (par l'intermédiaire des méthodes non-abstraites)
l'exemple des comptes est en l'occurence très bien choisi, mais pour à la place de Deltaden, j'aurais dit :
"Pour imprimer un extrait de compte, on a une méthode Compte.imprimeExtrait(Machin m), qi imprime l'ensemble des opérations effectuées sur le compte : ça ne dépend pas du type de compte, ça, les opérations...
Bon, c'est flou, mais il est 23h29, et je suis naze...
Mais garanti, c'est très très très très très utile, et même indispensable en POO.