9
votes

Puis-je appeler une méthode dans une interface sans implémenter l'interface?

Puis-je appeler une méthode à l'intérieur d'une interface sans implémenter l'interface dans ma classe? xxx pré>

maintenant une classe ici ... p>

public class HulkHogan { 

//Calling the method savePerson here
//I dont want to implement the Interface in all.

}


4 commentaires

sérieusement. Je sais que les débutants ont des problèmes, mais vous n'essayez même pas de loger dans vos questions.


Vous appelez des méthodes sur des objets. Pas sur des interfaces. Où est votre objet? Quelle est sa classe?


Comment allez-vous appeler la méthode sans créer d'objet de référence?


@Bozho: Les questions ont un sens, cela dépend de la riposte que nous les renvoyons.


13 Réponses :


2
votes

non Vous ne pouvez pas l'appeler, vous devrez fournir sa mise en œuvre au moins

Suite à la méthode d'appel, vous aurez besoin d'un objet. Vous ne pouvez pas instantiier l'interface sans sa mise en œuvre fournie


0 commentaires

4
votes

Vous ne pouvez pas car la méthode ne contient pas de définition (corps de méthode). Le but d'une interface est de le mettre en œuvre quelque part afin d'avoir une implémentation réelle de cette méthode.


0 commentaires

1
votes

sauf si vous implémentez l'interface ou avoir un objet membre d'une classe qui implémente l'interface, vous ne pouvez pas utiliser la méthode sauvegarde , car par définition, il n'a pas de mise en œuvre Pourtant.


0 commentaires

1
votes

Vous devez l'appeler sur un objet qui est une instance de l'interface, donc hulkhogan devrait mettre en œuvre iPerson ou une instance de quelque chose qui implémente iPerson devrait être fourni à (ou instancié à l'intérieur, bien que cela ne soit pas préféré) hulkhogan .

plus au point (basé également sur vos questions précédentes), que vous attendez-vous à accomplir en appelant une méthode qui n'a pas de mise en œuvre?


0 commentaires

7
votes

Statiquement, vous pouvez le déclarer à être appelé. Vous n'avez pas nécessairement besoin d'implémenter l'interface à l'intérieur la classe d'appel. Par exemple: xxx

mais afin de l'exécuter, vous sera de la mettre en œuvre quelque part, car l'interface décrit simplement comment quelque chose se comporte mais ne fournit pas le comportement réel (c.-à-d. ne le met pas en œuvre).


0 commentaires

2
votes

L'interface n'est qu'une définition des méthodes sans mise en œuvre. Si vous ne mettez pas en œuvre les méthodes, que feront-ils quand vous les appelez?

D'autre part, une interface n'est pas nécessairement mise en œuvre par la classe d'appel. Donc, dans votre cas, Hulkhogan peut appeler la méthode de sauvegarde () d'un autre objet, sans la mettre en œuvre elle-même. Mais une classe doit la mettre en œuvre quelque part pour cela pour faire quelque chose.


0 commentaires

5
votes

Vous pouvez ainsi:

Person p =  new IPerson{

   public void savePerson(Contact contact) {
       // some code
   }

}


1 commentaires

Objection - Il y a une classe anonyme dans ce fragment de code.



1
votes

L'objectif d'une interface est de mandater un contrat spécifique et bien connu pour un type d'objet connu. Par exemple, par tradition, toutes les piles ont push (), POP () et POEK (). Donc, en écrivant une interface, vous écrivez expressément un contrat que quiconque écrit une pile devrait suivre.

Pour mettre de manière à mettre d'une autre manière, il s'agit d'un modèle qui dicte que toute classe qui s'appelle elle-même une pile doit mettre en œuvre des méthodes appelées POIN (), POP () et PEEK () que mon exemple ici traite. < Pré> xxx

C'est une technique orientée objet. À ce stade, vous ne recevrez pas de compilation car vous n'avez pas au moins mis en œuvre des méthodes pour les méthodes d'interface. Vous devrez écrire des méthodes correspondant aux signatures de l'interface avant de pouvoir utiliser complètement l'interface.


0 commentaires

0
votes
public class HulkHogan {

private IPerson person;

public void setContactM(IPerson person) {
    this.person= person;
}

public void doSomething(Contact contact) {
    person.savePerson(contact); 
  }

}
Hope the savePerson method has some definition somewhere in other class which implements it. Through this way you can call the method inside your interface. 

0 commentaires

3
votes

non vous ne pouvez pas ... BCoZ Toutes les méthodes de l'interface de la classe sont abstraites..et vous ne pouvez pas les utiliser sans implémenter la classe ...


0 commentaires

1
votes

Lorsque vous dites que vous mettez en œuvre une interface pour une classe, vous voulez réellement que vous respectiez un contrat (ou une discipline) qui est défini dans l'interface, vous donnerez la définition de la méthode de l'interface, donc juste Sentez cette interface est un conteneur contenant une règle,

Vous avez dit que vous souhaitez appeler la méthode de l'interface: qui n'est pas une méthode en soi qui n'est qu'une règle définie alors qu'est-ce que le point est appelé une méthode qui n'a pas de corps (en fait n'est pas une méthode en soi )

... Profitez


0 commentaires

1
votes

Vous pouvez créer un proxy qui ne fait rien pour se moquer d'appels à l'interface. Cependant, cela crée efficacement une mise en œuvre de manière dynamique. Vous ne pouvez pas éviter de fournir une implémentation d'une sorte.


0 commentaires

0
votes

Vous ne pouvez pas appeler la méthode pendant qu'elle n'a pas de corps implémenté. La classe d'implémentation lui donnera le corps dont vous avez besoin. En Java 8, vous pouvez implémenter le corps de la méthode à l'intérieur de l'interface elle-même et utiliser le modificateur d'accès statique pour celui-ci. Dans ce cas, vous devez simplement importer l'interface dans votre classe actuelle (au cas où il se trouve dans un autre package), puis vous pouvez appeler la méthode directement.


0 commentaires