Scala имеет черты, которые являются интерфейсом на трещине. Действительно, они должны быть интерфейсами, по общему признанию, существуют ограничения, когда дело доходит до конструкторов, но это не так уж важно, учитывая тот факт, что если у вас есть два интерфейса, оба имеют требования конструктора, вы столкнетесь с те же проблемы.
Кроме того, существуют частичные методы, и во многих отношениях многие из хороших объектно-ориентированных принципов проектирования, основанных на управлении зависимостями, можно было бы рассматривать почти как способы получения единиц работы, которые являются более компонуемыми. Вместо того, чтобы работать только с входами и выходами метода или с заранее определенными точками, в которых используется объект / метод стратегии, у вас есть немного больше гибкости.
Добавьте к этому компаньону объекты, и внезапно фабрики и многое другое станут гораздо более тривиальными.
Учитывая это, вы действительно можете избавиться от необходимости использовать интерфейсы повсюду, и с более мощной системой универсальных обобщений, часть того, что делается с помощью интерфейсов, поглощается там.
В целом, при взгляде на код Scala, он имеет тенденцию быть довольно разложенным, и интерфейсы, кажется, не являются основным инструментом в этом.