score:676
tl;dr
class C
defines a class, just as in Java or C++.object O
creates a singleton objectO
as instance of some anonymous class; it can be used to hold static members that are not associated with instances of some class.object O extends T
makes the objectO
an instance oftrait T
; you can then passO
anywhere, aT
is expected.- if there is a
class C
, thenobject C
is the companion object of classC
; note that the companion object is not automatically an instance ofC
.
Also see Scala documentation for object and class.
object
as host of static members
Most often, you need an object
to hold methods and values/variables that shall be available without having to first instantiate an instance of some class.
This use is closely related to static
members in Java.
object A {
def twice(i: Int): Int = 2*i
}
You can then call above method using A.twice(2)
.
If twice
were a member of some class A
, then you would need to make an instance first:
class A() {
def twice(i: Int): Int = 2 * i
}
val a = new A()
a.twice(2)
You can see how redundant this is, as twice
does not require any instance-specific data.
object
as a special named instance
You can also use the object
itself as some special instance of a class or trait.
When you do this, your object needs to extend some trait
in order to become an instance of a subclass of it.
Consider the following code:
object A extends B with C {
...
}
This declaration first declares an anonymous (inaccessible) class that extends both B
and C
, and instantiates a single instance of this class named A
.
This means A
can be passed to functions expecting objects of type B
or C
, or B with C
.
Additional Features of object
There also exist some special features of objects in Scala. I recommend to read the official documentation.
def apply(...)
enables the usual method name-less syntax ofA(...)
def unapply(...)
allows to create custom pattern matching extractors- if accompanying a class of the same name, the object assumes a special role when resolving implicit parameters
score:-1
If you are coming from java background the concept of class in scala is kind of similar to Java, but class in scala cant contain static members.
Objects in scala are singleton type you call methods inside it using object name, in scala object is a keyword and in java object is a instance of class
score:2
The object is similar to the static class in Java to some extend, the static characteristic means the static class need not to create an object when putting to the JVM, it can be used by it's class name directly and the same instance(same data state) is shared wherever it is used.
score:2
Scala class same as Java Class but scala not gives you any entry method in class, like main method in java. The main method associated with object keyword. You can think of the object keyword as creating a singleton object of a class that is defined implicitly.
more information check this article class and object keyword in scala programming
score:3
A class is just like any other class in other languages. You define class just like any other language with some syntax difference.
class Person(val name: String)
val me = new Person("My name")
However, object is a class with single object only. This makes it interesting as it can be used to create static members of a class using companion object. This companion object has access to private members of the class definition and it has the same name as the class you're defining.
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()
Also, noteworthy point is that object class is lazily created which is another important point. So, these are not instantiated unless they are needed in our code.
If you're defining connection creation for JDBC, you can create them inside object to avoid duplication just like we do in Java with singleton objects.
score:6
Object is a class but it already has(is) an instance, so you can not call new ObjectName
. On the other hand, Class is just type and it can be an instance by calling new ClassName()
.
score:7
The object keyword creates a new singleton type, which is like a class that only has a single named instance. If you’re familiar with Java, declaring an object in Scala is a lot like creating a new instance of an anonymous class.
Scala has no equivalent to Java’s static keyword, and an object is often used in Scala where you might use a class with static members in Java.
score:8
In scala, there is no static
concept. So scala creates a singleton object to provide entry point for your program execution.
If you don't create singleton object, your code will compile successfully but will not produce any output. Methods declared inside Singleton Object are accessible globally. A singleton object can extend classes and traits.
Scala Singleton Object Example
object Singleton{
def main(args:Array[String]){
SingletonObject.hello() // No need to create object.
}
}
object SingletonObject{
def hello(){
println("Hello, This is Singleton Object")
}
}
Output:
Hello, This is Singleton Object
In scala, when you have a class with same name as singleton object, it is called companion class and the singleton object is called companion object.
The companion class and its companion object both must be defined in the same source file.
Scala Companion Object Example
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.")
}
}
Output:
Hello, this is Companion Class.
And this is Companion Object.
In scala, a class can contain:
1. Data member
2. Member method
3. Constructor Block
4. Nested class
5. Super class information etc.
You must initialize all instance variables in the class. There is no default scope. If you don't specify access scope, it is public. There must be an object in which main method is defined. It provides starting point for your program. Here, we have created an example of class.
Scala Sample Example of Class
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);
}
}
I am sorry, I am too late but I hope it will help you.
score:20
The formal difference -
- you can not provide constructor parameters for Objects
- Object is not a type - you may not create an instance with new operator. But it can have fields, methods, extend a superclass and mix in traits.
The difference in usage:
- Scala doesn't have static methods or fields. Instead you should use
object
. You can use it with or without related class. In 1st case it's called a companion object. You have to:- use the same name for both class and object
- put them in the same source file.
To create a program you should use main method in
object
, not inclass
.object Hello { def main(args: Array[String]) { println("Hello, World!") } }
You also may use it as you use singleton object in java.
score:22
Defining an object in Scala is like defining a class in Java that has only static methods. However, in Scala an object can extend another superclass, implement interfaces, and be passed around as though it were an instance of a class. (So it's like the static methods on a class but better).
score:23
As has been explained by many, object
defines a singleton instance. The one thing in the answers here that I believe is left out is that object
serves several purposes.
It can be the companion object to a
class
/trait
, containing what might be considered static methods or convenience methods.It can act much like a module, containing related/subsidiary types and definitions, etc.
It can implement an interface by extending a
class
or one or moretrait
s.It can represent a case of a
sealed trait
that contains no data. In this respect, it's often considered more correct than acase class
with no parameters. The special case of asealed trait
with onlycase object
implementors is more or less the Scala version of an enum.It can act as evidence for
implicit
-driven logic.It introduces a singleton type.
It's a very powerful and general construct. What can be very confusing to Scala beginners is that the same construct can have vastly different uses. And an object
can serve many of these different uses all at once, which can be even more confusing.
score:81
An object has exactly one instance (you can not call new MyObject
). You can have multiple instances of a class.
Object serves the same (and some additional) purposes as the static methods and fields in Java.
score:260
A class
is a definition, a description. It defines a type in terms of methods and composition of other types.
An object
is a singleton -- an instance of a class which is guaranteed to be unique. For every object
in the code, an anonymous class is created, which inherits from whatever classes you declared object
to implement. This class cannot be seen from Scala source code -- though you can get at it through reflection.
There is a relationship between object
and class
. An object is said to be the companion-object of a class if they share the same name. When this happens, each has access to methods of private
visibility in the other. These methods are not automatically imported, though. You either have to import them explicitly, or prefix them with the class/object name.
For example:
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
}
}
Source: stackoverflow.com
Related Query
- Difference between object and class in Scala
- What's the difference between a companion object and a singleton class in Scala (Guice)
- What is the difference between a class and a type in Scala (and Java)?
- What's the difference between a class with a companion object and a class and object with the same name?
- Difference between conversion with implicit function and implicit class in Scala
- Scala case class copy-method difference between 2.9 and 2.10
- Scala what is the difference between defining a method in the class instead on the companion object
- Difference between a class snippet and an object snippet
- Difference between object with main() and extends App in scala
- Difference between Object and AnyRef in Scala
- Difference between scala concurrent and non concurrent class under parallelsim
- What is the difference between object A extends B and class A extends B and later new B
- Practical Difference Between Type and Class in Scala
- Difference between Class and Class.type in Scala
- Difference between instantiating something from the class and from the companion object
- What is the difference between case object defined in scala repl and sbt console?
- difference between type alias and generic class in scala
- What is the difference between Scala's case class and class?
- What is the formal difference in Scala between braces and parentheses, and when should they be used?
- Difference between a Seq and a List in Scala
- Difference between method and function in Scala
- Difference between case object and object
- difference between foldLeft and reduceLeft in Scala
- Difference between Array and List in scala
- What’s the difference between ScalaTest and Scala Specs unit test frameworks?
- Scala: What is the difference between Traversable and Iterable traits in Scala collections?
- Difference between reduce and foldLeft/fold in functional programming (particularly Scala and Scala APIs)?
- Difference between Abstract Class and Trait
- Difference between using App trait and main method in scala
- What's the difference between :: and ::: in Scala
More Query from same tag
- How getSet of Tuples from row in cassandra
- How to use thenCallRealMethod in Mockito Scala test cases for testing trait method?
- play-json - Could not find implicit value for parameter um
- scala sort list and get nth element
- Scala Spark: Extract name of the array-typed column
- Alias a Java method in Scala
- case match a `reflect.runtime.universe.Type`
- Spark Scala Dataframe join and modification
- Retrieve tuple from string
- Spark Job stuck between stages after join
- How to run scalatest specs with two different dependency injection containers?
- MasterSuite in Play 2.5 with ScalaTest / ScalaTestPlus
- Scala: list matching with/without substitution
- Implementing a typeclass using type parameters versus abstract types
- Refactoring gradle test class so that test inside can be run in parallel
- Using cloudera scalats library in project using sbt
- Create DataFrame with null value for few column
- substituting xml values programmatically with scala
- How to implement equals and hashCode proper in scala
- How to use SBT for interdependent projects in different configurations
- Scala: arguments contravariant and return types are covariant why?
- How do I convert Java collections into Scala in Cassandra Datastax driver
- scala pattern matching for comprehension
- What can I use scala.Singleton for?
- Exhaustive match on possible object values
- ssl - Error self signed certificate getting chain
- KafkaProducer for both keyed and unkeyed ProducerRecords
- How to get the body of variable initialisation from outer scope in Scala 3 macros?
- How to create schema (StructType) with one or more StructTypes?
- How should one handle dependencies among Play sub-projects?