O в OO означает «Объект», а не класс. Ориентация на объект - это все об объектах или экземплярах (если вы предпочитаете)
Статика не принадлежит объекту, ее нельзя наследовать, она не участвует в полиморфизме. Проще говоря, статика не является объектно-ориентированной.
Scala, с другой стороны, является объектно-ориентированным. Гораздо больше, чем Java, который особенно старался вести себя как C ++, чтобы привлечь разработчиков из этого языка.
Это хак, изобретенный C ++, который стремился соединить миры процедурного и ОО-программирования и который должен был быть обратно совместим с C. Он также допускал примитивы по тем же причинам.
Scala отбрасывает статики и примитивы, потому что они являются пережитком того времени, когда нужно было успокоить бывших процедурных разработчиков. Этим вещам нет места в каком-либо хорошо разработанном языке, который хотел бы описать себя как объектно-ориентированный.
Относительно , почему важно, чтобы по-настоящему ОО я собирался безбожно скопировать и вставить этот фрагмент из Билла Веннерса в список рассылки:
Хотя я смотрю на это так, что одноэлементные объекты позволяют вам
делать статичные вещи там, где они нужны, очень лаконично, но
также извлечь выгоду из наследования, когда вам нужно. Один пример это
проще тестировать статические части вашей программы, потому что вы можете сделать
черты, которые моделируют эти части и используют черты везде. Затем в
производственная программа использует реализацию объекта Singleton тех
черты, но в тестах используют фиктивные экземпляры.
Сам не мог бы сказать лучше!
Так что, если вы хотите создать что-то одно, то и статика, и синглтоны могут выполнить эту работу. Но если вы хотите, чтобы эта вещь откуда-то наследовала поведение, тогда статика вам не поможет.
По моему опыту, вы склонны использовать эту способность гораздо чаще, чем вы изначально думали, особенно после того, как вы некоторое время использовали Scala.