Puis-je appeler une méthode à l'intérieur d'une interface sans implémenter l'interface dans ma classe? maintenant une classe ici ... p> public class HulkHogan {
//Calling the method savePerson here
//I dont want to implement the Interface in all.
}
13 Réponses :
non strong> Vous ne pouvez pas l'appeler, vous devrez fournir sa mise en œuvre au moins p>
Suite à la méthode d'appel, vous aurez besoin d'un objet. Vous ne pouvez pas instantiier l'interface em> sans sa mise en œuvre fournie P>
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. P>
sauf si vous implémentez code> l'interface ou avoir un objet membre d'une classe qui implémente l'interface, vous ne pouvez pas utiliser la méthode sauvegarde code>, car par définition, il n'a pas de mise en œuvre Pourtant. P>
Vous devez l'appeler sur un objet qui est une instance de l'interface, donc 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? P> hulkhogan code> devrait mettre en œuvre iPerson code> ou une instance de quelque chose qui implémente iPerson code> devrait être fourni à (ou instancié à l'intérieur, bien que cela ne soit pas préféré) hulkhogan code>. p>
Statiquement, vous pouvez le déclarer à être appelé. Vous n'avez pas nécessairement besoin d'implémenter l'interface mais afin de l'exécuter, vous strong> sera strong> 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). P> p>
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? P>
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. P>
Vous pouvez ainsi:
Person p = new IPerson{
public void savePerson(Contact contact) {
// some code
}
}
Objection - Il y a une classe anonyme dans ce fragment de code.
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. P> < Pré> xxx pré>
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. p> p>
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.
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 ... p>
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, p>
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 ) p>
... Profitez p>
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. P>
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. P>
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.