8
votes

Pourquoi les méthodes d'interface n'ont pas de corps

Pour atteindre plusieurs héritages, nous devons utiliser des interfaces, mais pourquoi ne pas interfacer les méthodes ont des corps et pourquoi doivent-ils être remplacés dans la classe dérivée?

Je veux vraiment une réponse lucide, ne pas impliquer trop de jargon informatique, je ne peux pas sembler comprendre cela, j'ai référé diverses références


8 commentaires

Parce que, sinon, vous auriez le désordre de héritage multiple régulier (C ++), qui est généralement une complexation redondante.


On m'a demandé cela lors d'une interview, pourriez-vous s'il vous plaît élaborer cette


Les interfaces sont pas "héritage multiple". Plusieurs héritages sont laids, les interfaces sont belles;) et les interfaces ne sont pas remplaçables , elles sont "implémentées". Pour comprendre Java "Interfaces", vous devez comprendre "oo polymorphisme". Une interface Java est un contrat qu'une classe d'implémentation doit honorer. Une interface Java est "Spécification"; Une classe d'implémentation fournit le "comportement" réel.


"On m'a demandé cela lors d'une interview". Si vous indiquez avec précision ce que l'intervieweur a réellement dit ... Je l'aurais corrigé (ou elle) ... puis courez! A MON HUMBLE AVIS...


@ paulsm4 quelle est la correction dans la question !! (excité)


De plus, si l'interface avait des organes de méthodes, comment cela fournirait-il abstraction?


@Nandkumar pourriez-vous élaborer un peu s'il vous plaît


@ user1537158: chat.stackoverflow.com/rooms/15943/...


8 Réponses :


13
votes

Parce que Java, contrairement à des langues telles que C ++ ou Eiffel, n'a que plusieurs héritages de types (c.-à-d. Interfaces ainsi qu'une classe), pas une héritage multiple de l'état et comportement . La fin desquelles ajoutent une énorme complexité (en particulier l'état).

Les concepteurs Java (et C #, pour cette affaire) ont choisi de ne pas l'inclure, car il a présenté des programmeurs C ++ souvent avec des problèmes très difficiles à déboguer. Vous pouvez résoudre à peu près la plupart des problèmes qui nécessitent un véritable héritage multiple avec la mise en œuvre de plusieurs interfaces, de sorte que le compromis ait été jugé la peine.

Notez que l'héritage multiple de comportement (non de l'état) pourrait venir à Java 8 (à moins qu'ils ne le repoussent à nouveau comme l'une des nombreuses autres choses) sous forme de méthodes d'extension virtuelle Lorsqu'une interface peut déclarer une méthode qui déléguette à une autre classe, qui existe ensuite sur tous les types qui implémentent cette interface.


4 commentaires

pourrait être plus spécifique sur les types et le comportement, en donnant un exemple? s'il te plaît


Si vous avez une classe, il aura invariablement State , c'est-à-dire des champs. Par exemple. Pour une personne hypothétique la classe qui pourrait être un nom. Ensuite, les classes ont comportement sous forme de méthodes. Méthodes font certaines choses et d'une certaine manière. Interfaces en contraste seulement indiquez le nom et les arguments des méthodes en quelque sorte un contrat. Comment une classe d'implémentation implémente ces méthodes est jusqu'à la classe, l'interface ne peut donc pas fournir un comportement car il n'a pas de mise en œuvre de la méthode.


Par ce que vous voulez dire, chaque classe dérivée en Java, qui implémente une interface, aura alors une flexibilité d'avoir sa propre défense d'une méthode dans l'interface?


Il peut implémenter la méthode, mais elle voit l'ajustement, oui. C'est pourquoi une méthode Linked LinkedList et une arrayliste ont une méthode (int) , mais pour les deux, il est mis en œuvre assez différemment.



1
votes

Une interface Java contient une liste de méthodes qui doivent être implémentées par la classe qui implémente l'interface. Ainsi, les méthodes n'ont pas de corps: le corps de chaque méthode est dans la classe de mise en œuvre (ES).


0 commentaires

2
votes

interfaces déclarent quels services la classe d'exécution fournit, non pas comment (c'est le travail de la classe d'implémentation). Le héritage multiple est considéré comme mauvais, car cela conduit à des hiérarchies de code et de classe complexes.


0 commentaires

2
votes

interfaces uniquement ont des variables constantes (publiques + statique + finale) et des méthodes abstraites (publique et abstraite). Celles-ci sont destinées à être utilisées par les classes qui implémentent les interfaces.

interfaces disent simplement «un contrat», que si vous souhaitez utiliser, vous devez vous en tenir à certaines règles (donner la mise en œuvre à toutes les méthodes abstraites).

Plusieurs héritage sont omis dans Java en veillant à ce qu'une classe ne puisse prolonger qu'une classe, afin d'éviter le problème de diamant . De toute façon, vous pouvez quand même disposer de multiples types de types en Java en utilisant des interfaces.


0 commentaires

0
votes

Méthodes d'interface n'a pas de corps comme xxx

parce que l'interface elle-même ne va pas faire quoi que ce soit

interface définit le contrat.

l'interface, en revanche, définit ce qu'est une classe peut faire, pas ce que c'est. Donc interface concerne généralement les verbes.

donc l'interface volable ne fait que définir le contrat que l'implantation FlyableBjects va voler.

J'aime: xxx

interface

et bien sûr, nous pouvons réaliser de multiples héritage uniquement et uniquement via l'interface. >


0 commentaires

1
votes

réponse simple: strong>

Une interface fournit une norme de mise en œuvre. P> blockQuote>

Explication: strong>

Dans Java, une interface est similaire à une classe abstraite dans laquelle ses membres sont non mis en œuvre forts>. Par exemple, P>

public class Polynomial implements Comparable
{   . . .
    boolean less(Object m){ . . . }
    boolean greater(Object m){ . . . }
    boolean lessEqual(Object m){ . . . }
    boolean greaterEqual(Object m){ . . . }

    Polynomial multiply(Polynomial P){ . . . }
    . . .
}


3 commentaires

-1; Si vous prenez du texte à partir d'un site, vous devriez au moins donner un lien à l'original. Texte déchiré de ce site: CSIS.Pace.edu/~bergin/papers/interface. HTML


@Maba, désolé pour votre inconvénient, je veux juste expliquer le sujet, j'ai pris de nombreux endroits et l'a édité plusieurs fois. Si vous avez vraiment besoin d'avoir des liens, cette réponse sera pleine avec des liens! Vous avez besoin de liens ou de bonne réponse? Mieux vaut vous concentrer pour améliorer la réponse, si vous êtes capable de le faire.


Nous avons besoin de bons original réponses. Si celui-ci écrit l'original voulait venir ici et la coller, plus de pouvoir pour lui. Mais vous n'êtes pas lui. Vous ne faites pas cela, sans sa permission. Il suffit de fournir un lien vers l'original ne vous absoue pas automatiquement de violation du droit d'auteur. Mais dans ce cas, vous n'avez même pas fait que .



0
votes

Si les interfaces avaient des corps, il aurait rapporté le diamant mortel du problème de mort.

considère cet exemple ayant des interfaces avec des corps xxx


0 commentaires

0
votes

Vous demandez "pourquoi Java ne prend-il pas en charge de multiples héritage de la mise en œuvre?"

Ceci est discuté dans les tutoriels Java, Héritage multiple de l'état, de la mise en œuvre et du type , mais je souhaitais donner un exemple spécifique des problèmes d'héritage multiple de la mise en œuvre (ainsi qu'une nouvelle langue Solution de fonctionnalité à la fin). P>

Imaginez deux interfaces (dans notre version proposée de Java qui permet aux organes de méthodes d'interface) qui définissent une méthode avec le même nom. P>

@Override
public void method() {
    FaceOne.super.method();
    FaceTwo.super.method();
    System.out.println("Inheriter Version");
}


0 commentaires