Scala 单例和伴随对象
单例对象
Scala 比Java更面向对象的语言,因此,Scala不包含任何静态关键字的概念。而不是 static 关键字 Scala 有单例对象。单例对象是定义类的单个对象的对象。单例对象提供程序执行的入口点。如果您没有在程序中创建单例对象,那么您的代码会成功编译,但不会给出输出。因此,您需要一个单例对象来获取程序的输出。使用object关键字创建单例对象。
句法:
object Name{
// code...
}
关于单例对象的要点
- 单例对象中的方法是全局可访问的。
- 不允许创建单例对象的实例。
- 不允许在单例对象的主构造函数中传递参数。
- 在 Scala 中,单例对象可以扩展类和特征。
- 在 Scala 中,主方法始终存在于单例对象中。
- 单例对象中的方法是通过对象的名称来访问的(就像在Java中调用静态方法一样),所以不需要创建对象来访问该方法。
示例 1:
Scala
// A simple Scala program to illustrate
// the concept of singleton object
class AreaOfRectangle
{
// Variables
var length = 20;
var height = 40;
// Method which gives the area of the rectangle
def area()
{
var ar = length * height;
println("Height of the rectangle is:" + height);
println("Length of the rectangle is:" + length);
println("Area of the rectangle is :" + ar);
}
}
// singleton object
object Main
{
def main(args: Array[String])
{
// Creating object of AreaOfRectangle class
var obj = new AreaOfRectangle();
obj.area();
}
}
Scala
// A Scala program to illustrate
// how to call method inside singleton object
// Singleton object with named
// as Exampleofsingleton
object Exampleofsingleton
{
// Variables of singleton object
var str1 = "Welcome ! GeeksforGeeks";
var str2 = "This is Scala language tutorial";
// Method of singleton object
def display()
{
println(str1);
println(str2);
}
}
// Singleton object with named as Main
object Main
{
def main(args: Array[String])
{
// Calling method of singleton object
Exampleofsingleton.display();
}
}
Scala
// A Scala program to illustrate
// the concept of the Companion object
// Companion class
class ExampleofCompanion
{
// Variables of Companion class
var str1 = "GeeksforGeeks";
var str2 = "Tutorial of Companion object";
// Method of Companion class
def show()
{
println(str1);
println(str2);
}
}
// Companion object
object ExampleofCompanion
{
def main(args: Array[String])
{
var obj = new ExampleofCompanion();
obj.show();
}
}
输出:
Height of the rectangle is:40
Length of the rectangle is:20
Area of the rectangle is :800
示例 2:
斯卡拉
// A Scala program to illustrate
// how to call method inside singleton object
// Singleton object with named
// as Exampleofsingleton
object Exampleofsingleton
{
// Variables of singleton object
var str1 = "Welcome ! GeeksforGeeks";
var str2 = "This is Scala language tutorial";
// Method of singleton object
def display()
{
println(str1);
println(str2);
}
}
// Singleton object with named as Main
object Main
{
def main(args: Array[String])
{
// Calling method of singleton object
Exampleofsingleton.display();
}
}
输出:
Welcome ! GeeksforGeeks
This is Scala language tutorial
解释:在上面的例子中,我们有两个单例对象,即Exampleofsingleton 和Main。 Exampleofsingleton 对象包含一个名为 display() 的方法,现在我们在 Main 对象中调用此方法。使用这个语句 Exampleofsingleton.display();我们调用存在于 Exampleofsingleton 对象中的 display() 方法并打印输出。
伴随对象
伴随对象被称为与类名相同的对象。或者换句话说,当一个对象和一个类具有相同的名称时,则该对象称为伴生对象,而该类称为伴生类。伴随对象在定义类的同一源文件中定义。允许伴随对象访问类的私有方法和私有字段。
例子:
斯卡拉
// A Scala program to illustrate
// the concept of the Companion object
// Companion class
class ExampleofCompanion
{
// Variables of Companion class
var str1 = "GeeksforGeeks";
var str2 = "Tutorial of Companion object";
// Method of Companion class
def show()
{
println(str1);
println(str2);
}
}
// Companion object
object ExampleofCompanion
{
def main(args: Array[String])
{
var obj = new ExampleofCompanion();
obj.show();
}
}
输出:
GeeksforGeeks
Tutorial of Companion object