¿Cuál es la diferencia entre una clase con un objeto compañero y una clase y un objeto con el mismo nombre?

El "objeto complementario" de una clase Scala se puede ver como un objeto singleton con el mismo nombre completo que la clase (es decir, el mismo nombre, en el mismo paquete). Se utilizan para mantener funciones de utilidad comunes a todas las instancias de la clase, como un reemplazo para Javastatic metodos

Sin embargo, en varios lugares de la documentación y en las preguntas, se dice que los objetos complementarios deben definirse en la misma unidad de compilación. Por ejemplo, deben estar definidos en el mismo archivo;Los objetos complementarios no se pueden definir para objetos Java; en el REPL, deben definirse en la misma línea de entradaDe ahí el mensaje de advertencia:

warning: previously defined class Foo is not a companion to object Foo.
Companions must be defined together; you may wish to use :paste mode for this.

Esto implica que debe haber una distinción entre una clase con su objeto compañero, y solo una clase y un objeto con el mismo nombre (completamente calificado). ¿Qué es esta distinción?

Respuestas a la pregunta(1)

Su respuesta a la pregunta