2017-07-10 3 views
0

Je commencé à apprendre Interfaces et maintenant je me demande quand utiliserclasse implémente l'interface

Interface i = new Class(); 

et quand utiliser

Class c = new Class(); 

et je remarque que je ne peux pas utiliser les méthodes de classe si Je le fais de la première façon, seulement des méthodes d'interface. Est-ce que tu sais pourquoi?

Désolé, je suis encore un noob en Java, Merci d'avoir répondu à

Répondre

1

Laissez-moi le dire de façon simple. L'interface définit le comportement de la classe et des classes qui implémente l'interface donnera des implémentations à ce comportement.

Voici un exemple

Interface Shape 
{ 
void draw(); 
} 

Class Circle implements Shape 
{ 
    void draw() 
    { 
    ... code to draw circle 
    } 

    void printRadius() 
    { 
    } 
} 

Class Rectangle implements Shape 
{ 
    void draw() 
    { 
    ... code to draw rectangle 
    } 

    void printDiagonal() 
    { 
    } 
} 

maintenant si vous voyez même interface Shape est mis en œuvre par 2 classes diffrently.

Maintenant, je peux écrire comme ça

Shape shape = new Circle(); // This will allow you access only draw method 
Circle circle = new Circle(); // This will allow you access all methods of circle 

Lorsque vous voulez que votre client/consommateur d'accéder uniquement des méthodes de specicfic de forme comme tirage au sort, puis utilisez Shape shape = new Circle() autre si vous voulez cercle méthode spécifique tel que printRadius puis utilisez Circle circle = new Circle()

0

Les interfaces de paradigme OOP utilisé pour comportement commun généralisé à travers un groupe d'objets un peu semblables. Par conséquent, vous utilisez une variable de type plus général, par ex. interface, vous ne pourrez utiliser que les méthodes courantes définies par l'interface. Puisque vous devriez être capable d'assigner à la variable d'interface n'importe quel descendance d'interface (classes qui implémente l'interface donnée) et être capable de travailler avec elle. Par conséquent, tout en assignant

Interface i = new Class(); 

les seules méthodes que vous serez en mesure d'accéder est ceux qui sont définis dans le Interface. De plus, il est nécessaire de noter que cette variable sera liée dynamiquement au type d'exécution, par ex. Au Class dans votre exemple, les appels pour les méthodes définies dans votre interface seront envoyés à l'implémentation de la classe.


Pensez aussi à ce qui suit, par exemple, vous avez des définitions:

interface Vehicle { 
    public void drive(); 
    public void stop(); 
} 

Maintenant, si vous écrivez du code:

Vehicle v = new BMW() 
v.drive() 
// do something else 
v.stop() 

il doit se comporter même lorsque vous remplacez new BMW() avec new Mitsubishi(), indépendamment du fait que probablement dans votre classe BMW vous pourriez avoir

class BMW { 
    public void listenMusic() 
} 

Il est également appelé "Liskov substitution principle"

la notion Liskov d'un sous-type de comportement définit une notion de substituabilité pour les objets; c'est-à-dire que si S est un sous-type de T, alors les objets de type T dans un programme peuvent être remplacés par des objets de type S sans altérer aucune des propriétés souhaitables de ce programme.