2010-03-03 7 views
1

Il me semble que les deux interface et abstract function sont assez similaires,Interface et la fonction publique abstraite

c'est comme un ordre qu'une méthode doit être mise en œuvre,

alors quelle est la différence?

+0

Duplicata http://stackoverflow.com/questions/1221512/abstract-class-and-interface-class –

+0

Un autre duplicata http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general- oo –

+0

Désolé, c'est une ** typo **, je veux dire "fonction abstraite" – user198729

Répondre

6

Have a look at this.

Citation: (Très bon explantion par e-satis)

Interface

Une interface est un contrat: le gars écrit l'interface dire « hey, J'accepte les choses de cette façon », et le gars qui utilise l'interface dit« OK, la classe que j'écris ressemble à ça ».

Et l'interface est un shell vide, il y a seulement les signatures (nom/param/type de retour) des méthodes. Les méthodes ne contiennent rien. L'interface ne peut rien faire. C'est juste un motif.

par exemple (code pseudo):

// I say all motor vehicles should look like that : 
interface MotorVehicle 
{ 
    void run(); 

    int getFuel(); 
} 

// my team mate complies and write vehicle looking that way 
class Car implements MotoVehicle 
{ 

    int fuel; 

    void run() 
    { 
     print("Wrroooooooom"); 
    } 


    int getFuel() 
    { 
     return this.fuel; 
    } 
} 

La mise en œuvre d'une interface consomment très peu d'unité centrale de traitement, parce que ce n'est pas une classe, juste un tas de noms, et par conséquent il n'y a aucune recherche coûteuse à faire. C'est génial quand ça compte comme dans les appareils embarqués.

classes abstraites

classes abstraites, à la différence des interfaces, sont des classes. Il y a plus cher à utiliser car il y a une recherche à faire quand vous héritez d'eux.

Les classes abstraites ressemblent beaucoup aux interfaces, mais elles ont quelque chose de plus: vous pouvez définir un comportement pour elles. Il s'agit plus d'un gars disant "ces classes devraient ressembler à cela, et ils ont cela en commun, alors remplissez les blancs!".

par exemple:

// I say all motor vehicles should look like that : 
abstract class MotorVehicle 
{ 

    int fuel; 

    // they ALL have fuel, so why let others implement that ? 
    // let's make it for everybody 
    int getFuel() 
    { 
     return this.fuel; 
    } 

    // that can be very different, force them to provide their 
    // implementation 
    abstract void run(); 


} 

// my team mate complies and write vehicle looking that way 
class Car extends MotorVehicule 
{ 
    void run() 
    { 
     print("Wrroooooooom"); 
    } 
} 

Par: https://stackoverflow.com/users/9951/e-satis

1

Dans les langues sans héritage multiple, la différence est très importante. En termes PHP ou Java, une classe peut implémenter plusieurs interfaces, mais ne peut hériter que d'une classe parent unique, qui peut être abstraite.

En C++ par exemple, la distinction devient moins importante.

Questions connexes