будет называться.
ался сгенерировать Фабрику, которая должна возвращать другой объект общего интерфейса (скажем,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
оператор, чтобы проверить, что тип переменной, но я думал, что решение, которое я представил выше, было немного более элегантным.