Попытка «большой картинки»;большая часть этого была рассмотрена в других ответах, но, похоже, не существует ни одного всеобъемлющего ответа, который бы объединял все это и объединял точки.Итак, здесь ...
Статические методы в классе не являются методами для объекта, это означает, что:
- Статические члены не могут быть унаследованы от родительского класса / признака
- Статические члены не могут использоваться для реализации интерфейса
Статические члены класса не могут быть переданы в качестве аргумента какой-либо функции
(и из-за вышеуказанных пунктов ...)
- Статические члены не могут быть переопределены
- Статические члены не могут быть полиморфными
Суть объектов в том, что они могут наследовать от родительских объектов, реализовывать интерфейсы и передаваться в качестве аргументов - статические члены не имеют ни одного из этих свойств, поэтому они не являются действительно объектно-ориентированными, они немного большечем пространство имен.
Синглтон-объекты, с другой стороны, являются полноправными членами объектного сообщества.
Еще одно очень полезное свойство синглетонов заключается в том, что их можно легко изменятьв какой-то более поздний момент времени кне будьте одиночными, это особенно болезненный рефакторинг, если вы начинаете со статических методов.
Представьте, что вы разработали программу для печати адресов и представляли взаимодействия с принтером с помощью статических методов в каком-то классе, а затем вы захотитевозможность добавить второй принтер и позволить пользователю выбирать, какой из них он будет использовать ... Это было бы неинтересно!