web-dev-qa-db-fra.com

quelle est l'utilisation réelle de l'interface en java?

Doublons possibles:
Classe abstraite et classe d'interface?
Java: interface/classes abstraites/méthode abstraite

En Java, quelle que soit l'utilisation de l'interface est remplie par la classe abstraite. Je sais que l'un des avantages des interfaces est que si nous implémentons une interface, nous pouvons également étendre une autre classe. Y a-t-il une autre utilisation ou avantage de l'interface en Java?

17
kandarp

Ce que vous aimez: des milliers de méthodes abstraites dans une classe abstraite et héritez de cette classe OR créez autant d'interfaces pour des méthodes abstraites spécifiques et utilisez celles que vous voulez en héritant d'autant d'interfaces que nécessaire ...

abstract class A
{
 //thousands of abstract method();
 abstract methodA();
 abstract methodB();
 abstract methodC();
}

//OR
interface ForOnlymethodA
{
 void methodA();
}
interface FormethodBandmethodC
{
 void methodB();
 void methodC();
}

Donc, n'utilisez cette méthode que ce dont vous avez besoin en héritant d'une interface particulière.Si vous héritez des classes Abstract, vous héritez inutilement de toutes les méthodes dont vous n'avez pas besoin dans une classe et qui peuvent être nécessaires dans d'autres classes. ..

23
FosterZ

Les interfaces vous permettent d'utiliser des classes dans différentes hiérarchies, polymorphiquement .

Par exemple, supposons que vous ayez l'interface suivante:

public interface Movable {
    void move();
}

N'importe quel nombre de classes, dans les hiérarchies de classes pourraient implémenter Movable à leur manière, tout en restant utilisées par certains appelants en uniforme façon.

Donc, si vous avez les deux classes suivantes:

public class Car extends Vehicle implements Movable {
    public void move() {
       //implement move, vroom, vroom!
    }
}

public class Horse extends Animal implements Movable {
    public void move() {
       //implement move, neigh!
    }
}

Du point de vue de l'appelant, c'est juste un Movable

Movable movable = ...;
movable.move();  //who am I?

J'espère que ça aide.

58
Todd

Plusieurs interfaces peuvent être implémentées, mais une seule classe peut être étendue. Une classe complètement abstraite ressemble beaucoup à une interface, sauf qu'une classe abstraite peut contenir des variables.

Cela dépend vraiment de ce dont vous avez besoin. C++ vous permet d'étendre autant de classes que vous le souhaitez, et cela devient un peu désastreux. La bonne chose à propos de n'avoir qu'une seule superclasse est qu'il n'y a qu'un seul autre ensemble d'implémentations dont vous devez vous soucier (même si le parent a un parent, la combinaison particulière du parent devient votre parent ...)

Les interfaces permettent à un objet de jouer plusieurs rôles, mais elles ne permettent pas la réutilisation du code.

C'est vraiment pour simplifier la réflexion sur l'héritage. Dans l'ensemble, je pense qu'ils ont bien compris.

7
Robert

Les interfaces permettent le typage nominatif in Java to work across disjoint class hiérarchies .

Cela est dû à la limitation "single héritage " d'une hiérarchie de classes et de "types fermés". Je vais me taire polymorphisme de sous-type et l'implémentation Java de celui-ci ;-)

Il existe d'autres solutions à ce problème telles que le typage dynamique, le typage structurel, l'héritage multiple et les traits, etc. Chaque approche présente des avantages et des inconvénients. Les interfaces n'étaient que l'approche adoptée par Java.

1
user166390

Avantages par rapport à une classe abstraite? sauf que vous pouvez implémenter plusieurs interfaces mais étendre une seule classe (abstraite ou non), c'est la même chose qu'une classe abstraite que toutes ses méthodes sont abstraites et publiques

0
Eran Medan