Интерфейсы существуют, так что старый код может вызывать новый код . Вы пишете интерфейс, который обеспечивает функцию, скажем foo()
. Я могу написать код, который вызывает foo()
сейчас , хотя реализации foo()
пока не существует. Он сможет вызывать любые будущие реализации foo()
, написанные задолго до того, как я уйду на свою виллу на Багамские острова.
Если вы объявите, что все будущие потомки вашего класса будут реализовывать конструктор по умолчанию, эта информация для меня бесполезна. Я не могу создать экземпляры класса, который еще не написан! Что мне или кому-либо еще, кто не видел потомка вашего класса, делать с вашим объявлением?
Если есть пользователь A, который хочет создать потомка вашего класса, и пользователь B, который хочет создать экземпляр класса A, то пусть они сами решат, как это сделать лучше всего. Вы не являетесь участником их сделки.
Но подождите минутку, я могу своего рода конструировать экземпляры класса, который еще не был написан! Мне нужно написать шаблон, создать объект внутри, и кто-то создаст его экземпляр своим классом. Но тогда я просто могу использовать конструктор по умолчанию, и это использование заставит любого, кто хочет создать экземпляр моего шаблона, реализовать конструктор по умолчанию.
Конечно, вы не можете заставить никого создать экземпляр вашего шаблона. Если пользователям это нужно, они будут реализовывать нужный вам конструктор. Если они не нуждаются в ваших услугах, лучше не говорите им, что делать.