/ / Java статични методи за преодоляване и интерфейси - java, методи, статични, отмяна

Java статични методи превъзхождат и интерфейси - Java, методи, статични, замени

Имам интерфейс с метод getT(), abstract B class с метода getS() и class C който се разпростира B class който implements A interface, Отмествам методи от A интерфейс и B суперклас вътре в C подклас. След това в main метод, който инстанцирам C клас да бъде тип, ако A като този: A obj = new C(); Аз съм в състояние да се обадя на getT() от obj, но не мога да се обадя getS() метод. Как мога да се обадя getS() метод от obj, но не мога да променя типа obj, трябва да е A, Ето кода:

Интерфейс A:

public interface A {
public String getT();
}

Абстрактен клас B:

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

подклас 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;
}

}

И основният метод вътре в клас T:

public class T {

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

}

Отговори:

1 за отговор № 1

С референтна променлива от тип A, не можете да се обадите getS(), защото това може да бъде всеки тип, който се реализира A, казвам, AImplementer, това не се простира от B, който и да е A обект няма задължително a getS() метод. Гарантирано е само да имам getT() метод.

ако obj трябва да е тип A и трябва да се обадите getS(), след това включете getS() метод при дефиницията на A интерфейс:

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

Тогава B е все още A, и можете да се обадите getS() върху A референтна променлива.

Между другото, не виждам никакви static методи във вашия код. Статичните методи не могат да бъдат отменени.


1 за отговор № 2

За да получите достъп до метода, ще трябва да свалите obj до B.

Така че можете да имате:

((B)obj).getS();

Даункастинг: http://www.programmerinterview.com/index.php/java-questions/downcasting-in-java/


0 за отговор № 3

типовият клас на obj е A, но A hasn "t метод getS (), така че не можете да се обадите в основния метод. obj трябва да е клас B или клас C.