Я не знаю, зачем вам это нужно. Вы можете просто вернуть новый экземпляр потомка и привести его к родителю. Это должно работать. Если у вас есть переопределенные методы или что-то в этом роде, и вы хотите иметь доступ к родительским методам, это другая проблема. В противном случае вы можете просто upcast:
Child child = new Child();
Parent parent = child;
Чтобы выгружать дочерний объект, все, что вам нужно сделать, это присвоить объект ссылочной переменной типа Parent. Родительская ссылочная переменная не может получить доступ к членам, которые доступны только в Child.
Поскольку parent ссылается на объект типа Child, вы можете привести его обратно к Child. Это называется downcasting, потому что вы приводите объект к классу по иерархии наследования. Даункастинг требует, чтобы вы записали дочерний тип в скобках. Например:
Child child2 = (Child) parent;
Если вам нужно иметь возможность получить экземпляры родителя, тогда, как кто-то рекомендовал, просто попросите вашего ребенка return new Parent()
.