📜  Scala 单例和伴随对象

📅  最后修改于: 2022-05-13 01:55:20.159000             🧑  作者: Mango

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