/ / Méthodes statiques de substitution et d'interface Java - java, méthodes, statique, substitution

Les méthodes Java statiques remplacent et les interfaces - java, méthodes, static, override

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 № 1

Avec 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 Aet 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.