Ну, надеюсь, вы меня понимаете. У меня есть два класса: A
и B
. B
является подклассом A
. Они имеют одни и те же общедоступные методы и означают одно и то же, но B делает некоторые вещи немного разными, поэтому у него есть дополнительные методы и атрибуты, которые используют только сам. Скажем, класс А реализует метод newFromWizard
, который интерактивно создает объект. Могу ли я реализовать логику, в зависимости от пользовательского ввода, создать объект A или или объект B в методе newFromWizard
A. Я имею в виду, могу ли я создать объект B из этого метода A? Или мне нужно реализовать это в другом месте? Как это лучший способ сделать это? На практике я могу. Но это правильно для ООП?Правильно ли возвращать объект, класс которого не является ожидаемым классом?
Кстати, если это имеет значение, я использую Smalltalk.
Это немного бит нарушения ООП (почему родительский класс знает о своих детях?), но в основном я бы сказал, что не делайте этого для удобочитаемости и предсказуемости. Используйте статический заводский метод (или эквивалент Smalltalk). –
@ChrisHayes on, родитель знает о подклассах. Вы просто выполняете «Object allSubclasses» и получаете все подклассы в системе.Также как класс отвечает за создание подкласса, все в порядке, что он знает о подклассах – Uko