Différence entre l'objet et la classe dans Scala
je suis en train de passer en revue quelques tutoriels Scala sur Internet et j'ai remarqué dans quelques exemples qu'un objet est déclaré au début de l'exemple.
13 réponses
tl; dr
-
class C
définit une classe, tout comme en Java ou en C++. -
object O
crée un singleton objectO
comme instance d'une classe anonyme; il peut être utilisé pour contenir des membres statiques qui ne sont pas associés à des instances d'une classe. -
object O extends T
fait l'objetO
une instance detrait T
; vous pouvez alors passerO
n'importe où, unT
est prévu. - s'il y a un
class C
, alorsobject C
est le objet compagnon de la classeC
; notez que l'objet compagnon est et non automatiquement une instance deC
.
Voir aussi la documentation de Scala pour objet et classe .
utilisation comme hôte des éléments statiques
le plus souvent, vous avez besoin d'un object
pour contenir les méthodes et les valeurs/variables qui doivent être disponibles sans avoir à instancier une instance de quelque classe.
Cette utilisation est étroitement liée aux membres static
en Java.
object A {
def twice(i: Int): Int = 2*i
}
vous pouvez alors appeler la méthode ci-dessus en utilisant A.twice(2)
.
si twice
était un membre d'une certaine classe A
, alors vous auriez besoin de faire un première instance:
class A() {
def twice(i: Int): Int = 2 * i
}
val a = new A()
a.twice(2)
vous pouvez voir comment cela est redondant, car twice
ne nécessite pas de données spécifiques à une instance.
Usage en tant qu'instance spéciale nommée
vous pouvez également utiliser le object
lui-même comme une instance spéciale d'une classe ou trait.
Lorsque vous faites cela, votre objet doit étendre certains trait
afin de devenir une instance d'une sous-classe.
considérer le code suivant:
object A extends B with C {
...
}
cette déclaration déclare d'abord une classe anonyme (inaccessible) qui étend à la fois B
et C
, et instancie une seule instance de cette classe nommée A
.
cela signifie que A
peut être passé à des fonctions s'attendant à des objets de type B
ou C
, ou B with C
.
Caractéristiques Supplémentaires de object
il existe aussi quelques particularités des objets en Scala. Je recommande de lire la documentation officielle .
-
def apply(...)
active la syntaxe usuelle sans nom de la méthodeA(...)
-
def unapply(...)
permet de créer un motif personnalisé correspondant Extracteurs - s'accompagnant d'une classe du même nom, l'objet assume un rôle particulier lors de la résolution de paramètres implicites
Un class
est une définition, une description. Il définit un type en termes de méthodes et de composition d'autres types.
Un object
est un singleton -- une instance d'une classe qui est garanti pour être unique. Pour chaque object
dans le code, une classe anonyme est créée, qui hérite de n'importe quelle classe que vous avez déclaré object
à mettre en œuvre. Cette classe ne peut pas être vue à partir du code source de Scala -- bien que vous puissiez y arriver par la réflexion.
Il existe une relation entre object
et class
. Un objet est dit être l'objet-compagnon d'une classe s'ils partagent le même nom. Lorsque cela se produit, chacun a accès à des méthodes de visibilité private
dans l'autre. Ces méthodes ne sont pas automatiquement importés. Vous devez soit les importer explicitement, soit les préfixer avec le nom de classe/objet.
par exemple:
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
}
}
un objet a exactement une instance (vous ne pouvez pas appeler new MyObject
). Vous pouvez avoir plusieurs instances d'une classe.
sert L'objet même (et quelques autres) purposes comme les méthodes statiques et les champs en Java.
comme beaucoup l'ont expliqué, object
définit une instance simple. La seule chose dans les réponses ici que je crois être écartée est que object
sert à plusieurs fins.
-
Il peut être le compagnon de l'objet à un
class
/trait
, contenant ce qui pourrait être considéré comme statique des méthodes ou des méthodes pratiques. -
il peut agir un peu comme un module, contenant types et définitions connexes/subsidiaires, etc.
-
Il peut mettre en œuvre une interface par extension d'une
class
ou un ou plusieurstrait
. -
Il peut représenter un cas de
sealed trait
qui ne contient pas de données. À cet égard, il est souvent considéré comme plus correct qu'uncase class
sans paramètres. Le cas particulier d'unsealed trait
avec seulement descase object
est plus ou moins la version Scala d'un enum. -
Il peut agir comme une preuve de
implicit
piloté par la logique. -
il introduit un type singleton.
c'est une construction très puissante et générale. Ce qui peut être très déroutant pour les débutants de Scala est que la même construction peut avoir des utilisations très différentes. Et un object
peut servir beaucoup de ces différents usages tous tout de suite, ce qui peut être encore plus déroutant.
définir un objet en Scala est comme définir une classe en Java qui n'a que des méthodes statiques. Cependant, dans Scala un objet peut étendre une autre superclasse, implémenter des interfaces, et être transmis comme s'il s'agissait d'une instance d'une classe. (C'est comme les méthodes statiques de classe mais en mieux).
la différence formelle -
- vous ne pouvez pas fournir les paramètres du constructeur
- ce n'est pas un type - vous ne pouvez pas créer une instance avec new operator. Mais il peut avoir des champs, des méthodes, étendre une superclasse et mélanger des traits.
la différence d'usage:
- Scala n'a pas de méthodes statiques ou dans les champs. Vous devez plutôt utiliser
object
. Vous pouvez l'utiliser avec ou sans classe. Dans le premier cas, ça s'appelle un objet compagnon. Vous devez:- utilisez le même nom pour la classe et l'objet
- mettre dans le même fichier source.
-
Pour créer un programme, vous devez utiliser la méthode
object
, pasclass
.object Hello { def main(args: Array[String]) { println("Hello, World!") } }
-
vous pouvez également l'utiliser comme vous utilisez objet singleton en java.
le objet mot-clé crée un nouveau type singleton, qui est comme un classe qui n'a qu'une seule instance nommée. Si vous êtes familier avec Java, déclarer un objet dans Scala est un peu comme créer une nouvelle instance d'une classe anonyme.
Scala n'a pas d'équivalent de Java statique mot-clé, et un objet est souvent utilisé dans Scala où vous peut utiliser une classe avec des membres statiques en Java.
Object est une classe mais elle a déjà(est) une instance, donc vous ne pouvez pas appeler new ObjectName
. D'un autre côté, Classe est juste un type et il peut être une instance en appelant new ClassName()
.
Classe Scala identique à la classe Java mais scala ne vous donne aucune méthode d'entrée en classe, comme la méthode principale en java. La méthode principale associée au mot-clé objet. Vous pouvez penser que le mot-clé objet crée un objet unique d'une classe qui est défini implicitement.
plus d'informations, consultez cet article de la classe et de l'objet de mot-clé dans la scala de programmation
à scala, il n'y a pas de concept static
. Scala crée un objet singleton pour fournir de point d'entrée pour l'exécution du programme.
Si vous ne créez pas d'objet singleton, votre code compilera avec succès mais ne produira aucune sortie. Les méthodes déclarées à L'intérieur de L'objet Singleton sont accessibles globalement. Un objet unique peut étendre les classes et les traits.
Scala Objet Singleton Exemple
object Singleton{
def main(args:Array[String]){
SingletonObject.hello() // No need to create object.
}
}
object SingletonObject{
def hello(){
println("Hello, This is Singleton Object")
}
}
sortie:
Hello, This is Singleton Object
en scala, quand vous avez une classe avec le même nom que singleton object, il est appelé companion class et l'objet singleton est appelé companion object.
la classe companion et son objet companion doivent tous deux être définis dans le même fichier source.
Scala Compagnon Objet Exemple
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.")
}
}
sortie:
Hello, this is Companion Class.
And this is Companion Object.
dans scala, une classe peut contenir:
1. Membre de données
2. Méthode du membre
3. Bloc Constructeur
4. Classe imbriquée
5. Super classe, des informations, etc ...
vous devez initialise toutes les variables d'instance dans la classe. Il n'est pas portée par défaut. Si vous ne spécifiez pas la portée d'accès, elle est publique. Il doit y avoir un objet dans laquelle la méthode est définie. Il fournit un point de départ pour votre programme. Ici, nous avons créé un exemple de classe.
Scala exemple D'échantillon de classe
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);
}
}
je suis désolé, je suis en retard mais j'espère que cela vous aidera.
l'objet est égal à la classe statique en Java à certains s'étend, les caractéristiques statiques signifie la classe statique n'ont pas besoin de créer un objet lors de la mise à la JVM,il peut être utilisé par son nom de classe directement
si vous venez de java background le concept de classe en scala est un peu similaire à Java, mais la classe en scala cant contient des membres statiques.
les objets en scala sont des méthodes de type singleton que vous appelez à l'intérieur en utilisant le nom de l'objet, en Scala l'objet est un mot-clé et en java l'objet est une instance de classe
Class & objet: une classe est une définition qui décrit tous les attributs d'une entité ou d'un objet. Et l'objet est une instance d'une classe.