Я пытался сгенерировать Фабрику, которая должна возвращать другой объект общего интерфейса (скажем, Item
) в соответствии с входным параметром (я называю это контекстом) функции getItem(A context)
Теперь предположим, что я определил новый тип контекста: B
, который наследуется от A
.
Я хотел вернуть другой элемент в зависимости от того, был ли объект, переданный фабрике, класса B
или A
.
Я попытался сделать следующее (перегружая метод):
class Factory
{
static Item getItem(A context) {...}
static Item getItem(B context) {...}
}
Это прекрасно работает, если я сделаю что-то вроде этого:
B bContext=new B();
Item it=Factory.getItem(bContext);
Однако, если я приведу объект к типу A
:
A bContext=(A) new B();
Item it=Factory.getItem(bContext);
, будет вызван первый фабричный метод.
Я думал, что полиморфизм обеспечит выполнение второго метода даже послеприведение, и я хотел бы знать, если я что-то пропустил?
Я знаю, что я мог бы продолжать иметь один метод и использовать оператор is
, чтобы проверить, какой тип переменной, но ядумал, что решение я представилвыше было немного элегантнее.