Mam interfejs A z metodą getT()
, abstract B class
z metodą getS()
i class C
to się rozszerza B class
który implements A interface
. Nadpisuję metody od A
interfejs i B
nadklasa wewnątrz C
podklasa. Następnie w main
metoda, w której utworzę instancję C
klasa, która będzie typeo, jeśli A
lubię to: A obj = new C();
Mogę zadzwonić do getT()
od obj
, ale nie można nawiązać połączenia getS()
metoda. Jak mogę zadzwonić getS()
metoda z obj
, ale nie mogę zmienić typu obj
, to musi być A
. Oto kod:
Interfejs A:
public interface A {
public String getT();
}
Klasa abstrakcyjna B:
public abstract class B implements A {
public abstract String getS();
}
podklasa 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;
}
}
I główna metoda w klasie T:
public class T {
public static void main(String[] args) {
A obj = new C();
obj.getT();
}
}
Odpowiedzi:
1 dla odpowiedzi № 1Z referencyjną zmienną typu A
, nie możesz zadzwonić getS()
, ponieważ może to być dowolny typ, który implementuje A
, mówić, AImplementer
, z którego nie wychodzi B
. Każdy A
obiekt nie musi mieć getS()
metoda. Gwarantuje to tylko getT()
metoda.
Gdyby obj
musi być typem A
i musisz zadzwonić getS()
, a następnie dołącz getS()
metoda w definicji A
berło:
public interface A {
public String getT();
public String getS(); // Add this line.
}
Następnie B
wciąż jest A
i możesz zadzwonić getS()
na A
zmienna referencyjna.
Nawiasem mówiąc, nie widzę żadnego static
metody w twoim kodzie. Metody statyczne nie mogą zostać zmienione.
1 dla odpowiedzi nr 2
Aby uzyskać dostęp do metody będziesz musiał obniżyć obj do B.
Więc mógłbyś:
((B)obj).getS();
Downcasting: http://www.programmerinterview.com/index.php/java-questions/downcasting-in-java/
0 dla odpowiedzi № 3
klasa typu obiektu to A, ale metoda A getn t getS (), więc nie można wywołać metody głównej. obj musi być klasą B lub klasą C.