sintaxis metodos introduccion colecciones scala class object

metodos - Diferencia entre objeto y clase en Scala



scala sintaxis (13)

Solo estoy revisando algunos tutoriales de Scala en Internet y he notado que en algunos ejemplos se declara un objeto al comienzo del ejemplo.

¿Cuál es la diferencia entre class y object en Scala?


tl; dr

  • class C define una clase, al igual que en Java o C ++.
  • object O crea un objeto singleton O como instancia de alguna clase anónima; se puede usar para mantener miembros estáticos que no están asociados con instancias de alguna clase.
  • object O extends T hace que el objeto O una instancia del trait T ; luego puedes pasar O cualquier parte, se espera una T
  • si hay una class C , entonces el object C es el objeto complementario de la clase C ; tenga en cuenta que el objeto complementario no es automáticamente una instancia de C

También vea la documentación de Scala para el object y la class .

Uso como anfitrión de miembros estáticos

La mayoría de las veces, necesita un object para contener métodos y valores / variables que estarán disponibles sin tener que crear una instancia de una instancia de alguna clase. Este uso está estrechamente relacionado con static miembros static en Java.

object A { def twice(i: Int): Int = 2*i }

Luego puede llamar al método anterior usando A.twice(2) .

Si twice fuera miembro de alguna clase A , primero tendría que crear una instancia:

class A() { def twice(i: Int): Int = 2 * i } val a = new A() a.twice(2)

Puede ver cómo esto es redundante, ya que twice no requiere ningún dato específico de la instancia.

Uso como una instancia con nombre especial

También puede usar el object sí como una instancia especial de una clase o rasgo. Cuando haces esto, tu objeto necesita extender algún trait para convertirse en una instancia de una subclase de él.

Considere el siguiente código:

object A extends B with C { ... }

Esta declaración declara primero una clase anónima (inaccesible) que se extiende tanto a B como a C , y crea una instancia de esta clase llamada A

Esto significa que A se puede pasar a funciones que esperan objetos de tipo B o C , o B with C

Características adicionales del object

También existen algunas características especiales de los objetos en Scala. Recomiendo leer la object .

  • def apply(...) habilita la sintaxis sin nombre del método habitual de A(...)
  • def unapply(...) permite crear extractors coincidencia de patrones personalizados
  • Si acompaña a una clase del mismo nombre, el objeto asume un rol especial al resolver los parámetros implícitos.

Clase y objeto: una clase es una definición que describe todos los atributos de una entidad o un objeto. Y el objeto es una instancia de una clase.


Como ha sido explicado por muchos, el object define una instancia de singleton. Lo único en las respuestas aquí que creo que queda fuera es que el object cumple varios propósitos.

  • Puede ser el objeto complementario de una class / trait , que contiene lo que podría considerarse métodos estáticos o métodos convenientes.

  • Puede actuar como un módulo, que contiene tipos y definiciones relacionadas / subsidiarias, etc.

  • Puede implementar una interfaz extendiendo una class o uno o más trait .

  • Puede representar un caso de un sealed trait que no contiene datos. En este sentido, a menudo se considera más correcto que una case class sin parámetros. El caso especial de un sealed trait con solo implementadores de case object es más o menos la versión Scala de una enumeración.

  • Puede actuar como evidencia para la lógica impulsada implicit .

  • Introduce un tipo singleton.

Es una construcción muy poderosa y general. Lo que puede ser muy confuso para los principiantes de Scala es que la misma construcción puede tener usos muy diferentes. Y un object puede servir a muchos de estos diferentes usos a la vez, lo que puede ser aún más confuso.


Definir un objeto en Scala es como definir una clase en Java que solo tiene métodos estáticos. Sin embargo, en Scala, un objeto puede extender otra superclase, implementar interfaces y transmitirse como si fuera una instancia de una clase. (Así es como los métodos estáticos en una clase pero mejor).


El objeto es igual a la clase estática en Java, algunas características estáticas significan que la clase estática no necesita crear un objeto cuando se coloca en la JVM, puede ser usado por su nombre de clase directamente


En scala, no hay concepto static . Así que Scala crea un objeto singleton para proporcionar un punto de entrada para la ejecución de su programa. Si no crea un objeto singleton, su código se compilará con éxito pero no producirá ningún resultado. Los métodos declarados dentro del objeto Singleton son accesibles globalmente. Un objeto singleton puede extender clases y rasgos.

Ejemplo de objeto Scala Singleton

object Singleton{ def main(args:Array[String]){ SingletonObject.hello() // No need to create object. } } object SingletonObject{ def hello(){ println("Hello, This is Singleton Object") } }

Salida:

Hello, This is Singleton Object

En scala, cuando tiene una clase con el mismo nombre que el objeto singleton, se denomina clase complementaria y el objeto singleton se denomina objeto complementario.

La clase compañera y su objeto compañero deben estar definidos en el mismo archivo fuente.

Ejemplo Scala Companion Object

class ComapanionClass{ def hello(){ println("Hello, this is Companion Class.") } } object CompanoinObject{ def main(args:Array[String]){ new ComapanionClass().hello() println("And this is Companion Object.") } }

Salida:

Hello, this is Companion Class. And this is Companion Object.

En scala, una clase puede contener:

1. miembro de datos

2. Método miembro

3. Bloque constructor

4. clase anidada

5. Información de la super clase, etc.

Debe inicializar todas las variables de instancia en la clase. No hay un alcance por defecto. Si no especifica el alcance de acceso, es público. Debe haber un objeto en el que se define el método principal. Proporciona punto de partida para su programa. Aquí, hemos creado un ejemplo de clase.

Ejemplo de Scala Ejemplo de clase

class Student{ var id:Int = 0; // All fields must be initialized var name:String = null; } object MainObject{ def main(args:Array[String]){ var s = new Student() // Creating an object println(s.id+" "+s.name); } }

Lo siento, llego demasiado tarde pero espero que te sirva de ayuda.


La clase Scala es igual que la clase Java, pero scala no le da ningún método de entrada en clase, como el método principal en java. El método principal asociado a la palabra clave objeto. Puede pensar que la palabra clave del objeto crea un objeto singleton de una clase que se define implícitamente.

más información, consulte esta clase de artículo y palabra clave de objeto en la programación de Scala


La diferencia formal -

  1. no puede proporcionar parámetros de constructor para objetos
  2. El objeto no es un tipo; no puede crear una instancia con un nuevo operador. Pero puede tener campos, métodos, extender una superclase y mezclar rasgos.

La diferencia de uso:

  • Scala no tiene métodos ni campos estáticos. En su lugar, debe utilizar el object . Puedes usarlo con o sin clase relacionada. En el primer caso se llama un objeto compañero. Tienes que:
    1. usa el mismo nombre para la clase y el objeto
    2. Póngalos en el mismo archivo fuente.
  • Para crear un programa, debe usar el método principal en el object , no en la class .

    object Hello { def main(args: Array[String]) { println("Hello, World!") } }

  • También puede usarlo mientras usa el objeto singleton en java.




La palabra clave del objeto crea un nuevo tipo de singleton, que es como una clase que solo tiene una única instancia con nombre. Si está familiarizado con Java, declarar un objeto en Scala es muy parecido a crear una nueva instancia de una clase anónima.

Scala no tiene un equivalente a la palabra clave estática de Java, y un objeto se usa a menudo en Scala, donde puede usar una clase con miembros estáticos en Java.


Si viene de Java, el concepto de clase en scala es similar a Java, pero la clase en scala no puede contener miembros estáticos.

Los objetos en scala son tipos singleton a los que llama métodos dentro de él usando el nombre del objeto, en el objeto scala es una palabra clave y en el objeto java es una instancia de clase


Un objeto tiene exactamente una instancia (no se puede llamar a new MyObject ). Puedes tener múltiples instancias de una clase.

El objeto tiene los mismos propósitos (y algunos adicionales) que los métodos y campos estáticos en Java.


Una class es una definición, una descripción. Define un tipo en términos de métodos y composición de otros tipos.

Un object es un singleton, una instancia de una clase que se garantiza que es única. Para cada object en el código, se crea una clase anónima, que hereda de cualquier clase que haya declarado object para implementar. Esta clase no se puede ver desde el código fuente de Scala, aunque se puede obtener a través de la reflexión.

Hay una relación entre object y class . Se dice que un objeto es el objeto-compañero de una clase si comparten el mismo nombre. Cuando esto sucede, cada uno tiene acceso a métodos de visibilidad private en el otro. Sin embargo, estos métodos no se importan automáticamente. Debe importarlos explícitamente o prefijarlos con el nombre de la clase / objeto.

Por ejemplo:

class X { // class X can see private members of object X // Prefix to call def m(x: Int) = X.f(x) // Import and use import X._ def n(x: Int) = f(x) private def o = 2 } object X { private def f(x: Int) = x * x // object X can see private members of class X def g(x: X) = { import x._ x.o * o // fully specified and imported } }


El objeto es una clase pero ya tiene (es) una instancia, por lo que no puede llamar al new ObjectName . Por otro lado, la clase es solo de tipo y puede ser una instancia al llamar a new ClassName() .