Добрый день,
У меня есть следующая проблема:
класс B расширяет класс A, и методы обоих вызываются другим методом в другом классе после создания экземпляра класса B (пример следует):
public class A{
//fields
//constructors
//methods
}
public class B extends A{
//fields
//constructors
//methods
}
public class CALLER{
public A getA(enum E){
return Factory.getB(otherobject,E);
}
}
public class Factory{
public static B getB(object o,enum e){
//do something with enums and get B
b = new B();
//populate b
return b;
}
}
Класс B не переопределяет любой метод класса A.
Каким-то образом во время компиляции это не вызывает ошибки, но во время выполнения класс CALLER исключает: java.lang.NoSuchMethodError: Factory.getB (object, enum) A
Мой вопрос: если B расширяет A, почему метод из другого класса не может вернуть A, даже если его предложение return возвращает объект B напрямую?
На самом деле меняется:
public static B getB(object, enum);
с
public static A getB(object, enum);
решает исключение, но затем я получаю другое исключение (classCast), потому что, очевидно, в других частях кода он ожидает объект типа B, а не A.
Заранее спасибо.