Это не наследование, потому что тип возвращаемого значения метода является частью его сигнатуры. Вы не меняете метод, вы создаете совершенно новый.
У вас есть несколько вариантов. Например, вы можете сделать метод DoSomethingAndReturnNewObject
универсальным и вернуть его универсальный тип. Это, вероятно, самый прямой путь к точному поведению, которое вы ищете.
Другая альтернатива - оставить сигнатуры методов без изменений, а методы подкласса возвращают экземпляры ClassB
и ClassC
. Тогда клиентский код должен отвечать за приведение, чтобы использовать эти объекты в качестве соответствующих производных классов.
Есть ли какая-то причина, по которой общего интерфейса ClassA
не достаточно? Полиморфизм, если вы правильно вывели и переопределили виртуальные элементы, предоставит вам правильную функциональность, если вы используете только элементы ClassA
.