745 Stimmen

Der Unterschied zwischen Objekt und Klasse in Scala

Ich gehe gerade einige Scala-Tutorials im Internet durch und habe festgestellt, dass in einigen Beispielen ein Objekt am Anfang des Beispiels deklariert wird.

Was ist der Unterschied zwischen class y object in Scala?

20voto

irudyak Punkte 1961

Der formale Unterschied -

  1. können Sie keine Konstruktorparameter für Objekte
  2. Objekt ist kein Typ - Sie können mit dem Operator new keine Instanz erzeugen. Aber sie kann Felder und Methoden haben, eine Oberklasse erweitern und Traits einmischen.

Der Unterschied in der Nutzung:

  • In Scala gibt es keine statischen Methoden oder Felder. Stattdessen sollten Sie object . Sie können es mit oder ohne zugehörige Klasse verwenden. Im 1. Fall nennt man es ein Begleitobjekt. Das müssen Sie:

    1. denselben Namen für Klasse und Objekt verwenden
    2. sie in dieselbe Quelldatei einfügen.
  • Um ein Programm zu erstellen, sollten Sie die Methode main in object , nicht in class .

    object Hello {
      def main(args: Array[String]) {
        println("Hello, World!")
      }
    }
  • Sie können es auch verwenden, wie Sie Singleton-Objekt in Java verwenden.

0 Stimmen

"Objekte haben die Methode apply(...), die ähnlich wie ein Konstruktor funktioniert. Das verwirrt mich ein wenig.

8voto

Bhaskar Das Punkte 632

In Scala gibt es keine static Konzept. Scala erstellt also ein Singleton-Objekt, um einen Einstiegspunkt für die Programmausführung zu schaffen. Wenn Sie kein Singleton-Objekt erstellen, wird Ihr Code zwar erfolgreich kompiliert, aber keine Ausgabe erzeugt. Methoden, die innerhalb eines Singleton-Objekts deklariert werden, sind global zugänglich. Ein Singleton-Objekt kann Klassen und Traits erweitern.

Scala Singleton Objekt Beispiel

object Singleton{  
    def main(args:Array[String]){  
        SingletonObject.hello()         // No need to create object.  
    }  
}  

object SingletonObject{  
    def hello(){  
        println("Hello, This is Singleton Object")  
    }  
}  

Ausgabe:

Hello, This is Singleton Object

Wenn Sie in Scala eine Klasse mit demselben Namen wie das Singleton-Objekt haben, wird diese als Begleiterklasse und das Singleton-Objekt als Begleitobjekt bezeichnet.

Die Begleitklasse und ihr Begleitobjekt müssen beide in derselben Quelldatei definiert sein.

Scala Companion Objekt Beispiel

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.")  
    }  
}  

Ausgabe:

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

In Scala kann eine Klasse enthalten:

1. Daten Mitglied

2. Mitglied Methode

3. Konstruktor-Block

4. Verschachtelte Klasse

5. Informationen zur Superklasse usw.

Sie müssen alle Instanzvariablen in der Klasse initialisieren. Es gibt keinen Standardbereich. Wenn Sie den Zugriffsbereich nicht angeben, ist er öffentlich. Es muss ein Objekt geben, in dem die Methode main definiert ist. Sie bildet den Ausgangspunkt für Ihr Programm. Hier haben wir ein Beispiel für eine Klasse erstellt.

Scala-Beispiel Beispiel einer Klasse

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);  
    }  
} 

Es tut mir leid, dass ich zu spät bin, aber ich hoffe, dass es Ihnen helfen wird.

7voto

El Objekt Schlüsselwort erzeugt einen neuen Singleton-Typ, der wie ein Klasse die nur eine einzige benannte Instanz hat. Wenn Sie mit Java vertraut sind, ist die Deklaration einer Objekt in Scala ist ähnlich wie das Erstellen einer neuen Instanz einer anonymen Klasse.

Scala hat keine Entsprechung zu Java's statisch Schlüsselwort, und ein Objekt wird in Scala oft dort verwendet, wo man in Java eine Klasse mit statischen Mitgliedern verwenden könnte.

6voto

Yonggoo Noh Punkte 1672

Objekt ist eine Klasse, die aber bereits eine Instanz hat (ist), daher können Sie nicht new ObjectName . Auf der anderen Seite, Klasse ist nur ein Typ und kann eine Instanz sein, indem man new ClassName() .

3voto

Piyush Patel Punkte 1456

Eine Klasse ist genau wie jede andere Klasse in anderen Sprachen. Sie definieren eine Klasse wie jede andere Sprache, mit einigen Unterschieden in der Syntax.

class Person(val name: String)
val me = new Person("My name")

Objekt ist jedoch eine Klasse mit nur einem Objekt. Dies macht es interessant, da es verwendet werden kann, um statische Mitglieder einer Klasse zu erstellen, indem man Begleitobjekt . Dieses Begleitobjekt hat Zugriff auf private Mitglieder der Klassendefinition und trägt den gleichen Namen wie die Klasse, die Sie definieren.

class Person(var name: String) {

  import Person._

  def hi(): String = sayHello(name)
}

object Person {
  private def sayHello(name: String): String = "Hello " + name
}

val me = new Person("My name")
me.hi()

Ein weiterer wichtiger Punkt ist die Tatsache, dass die Objektklasse nachlässig erstellt wird. Sie werden also nur dann instanziiert, wenn sie in unserem Code benötigt werden.

Wenn Sie die Verbindungserstellung für JDBC definieren, können Sie sie innerhalb eines Objekts erstellen, um eine Duplizierung zu vermeiden, so wie wir es in Java mit Singleton-Objekten tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X