/ / Nadpisanie statycznych metod Java i interfejsów - java, metody, statyczne, nadpisanie

Nadpisywanie statycznych metod Java i interfejsy - java, metody, statyczne, nadpisywanie

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

Z 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 Ai 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.