Scala 单例和伴生对象

Scala中的Singleton对象

Scala是一种面向对象的编程语言,它具有创建对象的能力,该对象无需类即可定义其成员。

一个单独的对象没有关联与它即它不存在任何类类。它是使用object关键字而不是class关键字定义的,并且是一个实例,不是一个蓝图,因此它不需要外部调用即可执行其方法。

为什么选择单例对象?

每个程序都需要一个从执行开始的点。在OOPS中,类需要对象才能执行。但是main()需要首先执行该方法以调用该类的其他成员。

为了main()在scala中执行该方法,许多面向对象的编程语言都使用static关键字,但是scala编程语言中没有static关键字。这就是为什么在Scala中我们使用定义了main方法的单例对象。

单例对象

没有类就可以存在的对象是单例对象。It objects关键字用于定义它。

语法:

    object singleton_objname {
	    // object code , member functions and fields. 
    }

单例对象的特征

  • 使用object关键字创建。

  • 成员是全局成员,即可以从程序中的任何位置调用成员。

  • 如果是单例对象,则无法创建实例。

  • 允许继承,即继承可以扩展类和特征。

  • 对于Singleton对象的多余成员,我们将使用Singleton对象的名称点成员名称。
    例如,

         Singleton_objname.member;

显示单例对象实现的程序

object findsum{
    var a = 56
    var b = 21
    def sum(): Int ={
        return a+b;
    }
}
object Main 
{ 
    def print(){
        printf("The sum is : "+ findsum.sum());
    }
	def main(args: Array[String]) 
	{ 
        print();
	} 
}

输出结果

The sum is : 77

说明:

该程序说明了Scala单例对象的用法。该程序将查找给定数字的总和并将其返回。有2个对象findsum和Main。findsum对象使用sum方法计算两个数字的和。主要对象有两种方法print()main()。打印方法,打印方法返回的值sum()

Scala中的同伴对象

如果类和单例对象具有相同的名称。然后,该类称为同伴类,singleton对象称为singleton对象

类和对象都在同一程序文件中定义。

显示伴随对象实现的程序

class companion{  
    var a = 23;
    var b = 78;
    def sum(){
        println("The sum is: "+ (a+b));
    }
}  

object companion{  
    def main(args:Array[String]){  
        new companion().sum(); 
    }  
}

输出结果

The sum is: 101

说明:

该程序用于说明伴生对象的概念。在这里,该程序用于查找给定整数的总和。为了计算总和,我们在伴随类中有一个方法总和。我们将使用点运算符从伴随对象中调用此方法。