La Confusion sur l'appel de la méthode de l'Interface Java
Disons que j'ai une interface Un, définis comme suit:
public interface A {
public void a();
}
Il comprend méthode appelée void a();
J'ai une classe qui implémente cette interface et n'a qu'une méthode:
public class AImpl implements A {
@Override
public void a() {
System.out.println("Do something");
}
}
Q: Si dans la classe principale, j'appelle la méthode de l'interface, il va appeler la mise en œuvre appartenant à la classe qui implémente l'interface?
Par exemple:
public static void main(String[] args){
A aa;
aa.a();
}
Aura cette impression de "Faire quelque chose"?
- Le côté gauche est toujours juste une fente où un objet peut aller. Comme Johan dit, vous avez besoin pour réellement "mettre" un objet, par la création d'un
new
. - S'il vous plaît essayer de poster un SSCCE pour décrire votre problème. Et inclure les messages d'erreur que vous obtenez. L'interface ne compile pas et la principale méthode de jeter une
NullPointerException
. Autre que cela, votre question est valide et doit être répondu par ma réponse ci-dessous. - Je suis maintenant à comprendre
- N'oubliez pas d'accepter (coche) la meilleure réponse. Donc, tout le monde sait que le problème est résolu.
- Cela fonctionne pour moi, merci. Mais est-ce le niveau moyen de l'aide
service
classes d'interface etserviceimpl
classes?
Vous devez vous connecter pour publier un commentaire.
Ici votre variable de référence est l'interface
A
type Mais réelleObject
estAImpl
.Lire plus sur La Documentation
Une référence de l'Interface peut contenir Objet de AImpl qu'il implémente l'interface.
Il dépend de l'exécution type de l'objet. Voir:
C'est votre interface:
Et c'est votre classe:
Il y a une autre mise en œuvre:
Donc un coup d'oeil à cette méthode principale:
Vous pourriez probablement trouver en cours d'exécution le code vous-même.
Actuellement, vous obtiendrez un
NullPointerException
parce que vous n'avez pas affecté quelque chose à la variableaa
. La modification de votre code suivant appelle la méthode de sortie et le texte:Vous avez besoin pour appeler la routine sur le réel
AImpl
objetqui, ici, est équivalente à la suivante
Votre échantillon déclenchera une erreur puisque vous essayez d'invoquer une méthode sur un uninitalized objet.
Pas. Je ne vais pas.
Vous avez déclaré une variable. Vous devriez initialze d'abord avec instance d'un objet, dans ce cas, votre classe
AImpl
.