J'ai une interface A avec une méthode getT()
, abstract B class
avec méthode getS()
et class C
qui s'étend B class
lequel implements A interface
. Je remplace les méthodes de A
interface et B
superclasse à l'intérieur du C
sous-classe. Puis dans le main
méthode j'instancie la C
classe à taper si A
comme ça: A obj = new C();
Je "peux appeler le getT()
de obj
, mais ne peut pas appeler getS()
méthode. Comment puis-je appeler getS()
méthode de obj
, mais je ne peux pas changer le type de obj
, ça doit être A
. Voici le code:
Interface A:
public interface A {
public String getT();
}
Classe abstraite B:
public abstract class B implements A {
public abstract String getS();
}
sous-classe C:
public class C extends B {
@Override
public String getT() {
System.out.println("method getT() from C class");
return null;
}
@Override
public String getS() {
return null;
}
}
Et la méthode principale à l'intérieur de la classe T:
public class T {
public static void main(String[] args) {
A obj = new C();
obj.getT();
}
}
Réponses:
1 pour la réponse № 1Avec une variable de référence de type A
, vous ne pouvez pas appeler getS()
, car il peut s'agir de n'importe quel type qui implémente A
, dire, AImplementer
, cela ne s'étend pas de B
. Tout A
l'objet n'a pas nécessairement un getS()
méthode. Il est seulement garanti d'avoir un getT()
méthode.
Si obj
doit être un type A
et vous devez appeler getS()
, puis inclure le getS()
méthode dans la définition du A
interface:
public interface A {
public String getT();
public String getS(); // Add this line.
}
alors B
est toujours un A
et vous pouvez appeler getS()
sur un A
variable de référence.
Au fait, je ne vois aucun static
méthodes dans votre code. Les méthodes statiques ne peuvent pas être remplacées.
1 pour la réponse № 2
Pour accéder à la méthode, vous devrez abattre obj en B.
Vous pourriez donc avoir:
((B)obj).getS();
Downcasting: http://www.programmerinterview.com/index.php/java-questions/downcasting-in-java/
0 pour la réponse № 3
la classe de type d'obj est A, mais la méthode hasn "t getS () ne permet donc pas d'appeler la méthode main. obj doit être de classe B ou de classe C.