/ / Metodi statici Java sovrascrittura e interfacce - java, metodi, static, override

Sovrascrittura e interfacce dei metodi statici Java: java, metodi, static, override

Ho un'interfaccia A con un metodo getT(), abstract B class con metodo getS() e class C quello si estende B class quale implements A interface. Sto scavalcando i metodi da A interfaccia e B superclasse all'interno del C sottoclasse. Quindi nel main metodo I istanziare il C classe di essere typeo se A come questo: A obj = new C(); "Sono in grado di chiamare il getT() a partire dal objma non si può chiamare getS() metodo. Come posso chiamare getS() metodo da obj, ma non posso cambiare il tipo di obj, deve essere A. Ecco il codice:

Interfaccia A:

public interface A {
public String getT();
}

Classe astratta B:

public abstract class B implements A {
public abstract String getS();
}

sottoclasse 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;
}

}

E il metodo principale all'interno della classe T:

public class T {

public static void main(String[] args) {
A obj = new C();
obj.getT();
}

}

risposte:

1 per risposta № 1

Con una variabile di riferimento di tipo A, non puoi chiamare getS(), perché potrebbe essere qualsiasi tipo che implementa Aper esempio AImplementer, che non si estende da B. Qualunque A l'oggetto non ha necessariamente a getS() metodo. E 'garantito solo per avere un getT() metodo.

Se obj deve essere un tipo A e devi chiamare getS(), quindi includi il getS() metodo nella definizione del A interfaccia:

public interface A {
public String getT();
public String getS(); // Add this line.
}

Poi B è ancora un Ae puoi chiamare getS() su un A variabile di riferimento.

A proposito, non ne vedo static metodi nel tuo codice. I metodi statici non possono essere sovrascritti.


1 per risposta № 2

Per accedere al metodo è necessario downcast obj a B.

Quindi potresti avere:

((B)obj).getS();

downcasting: http://www.programmerinterview.com/index.php/java-questions/downcasting-in-java/


0 per risposta № 3

la classe di tipo di obj è A, ma A non ha metodo getS () in modo da non poter chiamare il metodo principale. obj deve essere di classe B o di classe C.