Scala 初级构造器

Scala 初级构造器

构造函数用于初始化对象的状态。和方法一样,构造器也包含了一系列的语句(即指令)。语句在对象创建时被执行。当我们的Scala程序只包含一个构造函数时,该构造函数被 称为主构造函数。

主构造函数和类共享同一个主体,这意味着我们不需要明确创建一个构造函数。

语法

class class_name(Parameter_list) {
// Statements...
}

关于Scala中的主构造函数的一些重要观点 –

  • 主构造函数可以有零个或多个参数。
  • 参数列表中的参数在构造函数中使用 var 来声明,那么其值可能会改变。Scala还为该字段生成了getter和setter方法。
  • 参数表的参数在构造函数中使用 val 来声明,那么其值就不能改变。
  • 在构造函数中不使用 valvar 来声明参数列表的参数,那么字段的可见性就非常紧凑,Scala不会为该字段生成任何getter和setter方法。
  • 如果在构造函数中使用 私有的valvar 来声明参数列表的参数,那么它就不会为该字段产生任何getter和setter方法。因此,这些字段可以被该类的成员访问。
  • 在Scala中,只有主构造函数才允许调用超类构造函数。

让我们通过一些例子来更好地理解它。

例子1: 一个带有参数列表的主构造函数

// Scala program to illustrate the
// concept of primary constructor
 
// Creating a primary constructor
// with parameter-list
class GFG(Lname: String, Tname: String, article: Int)
{
    def show()
    {
        println("Language name: " + Lname);
        println("Topic name: " + Tname);
        println("Total published articles:" + article);
    }
}
 
// Creating object
object Main
{
    // Main method
    def main(args: Array[String])
    {
         
        // Creating and initializing
        // object of GFG class
        var obj = new GFG("Scala", "Constructors", 14);
        obj.show();
    }
}

输出

Language name: Scala
Topic name: Constructors
Total published articles:14

在上面的例子中, Lname、Tnamearticle 是主构造函数的参数,display是打印数值的函数。

例子#2: 一个带有参数列表的主构造函数。

// Scala program to illustrate the
// concept of default primary constructor
 
class GFG
{
    def show()
    {
        println("Welcome to Geeksforgeeks");
    }
}
 
// Creating object
object Main
{
    // Main method
    def main(args: Array[String])
    {
         
        // Creating object of GFG class
        var obj = new GFG();
        obj.show();
    }
}

输出

Welcome to Geeksforgeeks

在上面的例子中,我们可以看到,当我们创建一个类的对象时,编译器会 自动 创建一个主构造函数,这个构造函数被称为默认主构造函数。

例子#3: 带有默认值的主构造函数

// Scala program to illustrate the
// concept of primary constructor
 
// Creating primary constructor with default values
class GFG(val Lname: String = "Scala",
        val Tname: String = "Constructors")
{
    def show()
    {
        println("Language name: " + Lname);
        println("Topic name: " + Tname);
         
    }
}
 
// Creating object
object Main
{
    // Main method
    def main(args: Array[String])
    {
        // Creating object of GFG class
        var obj = new GFG();
        obj.show();
    }
}

输出:

Language name: Scala
Topic name: Constructors

例子#4: 通过使用private关键字使初级构造函数私有化。

// Scala program to illustrate the
// concept of primary constructor
// by using private keyword
class GFG private
{
    // Define method
    override def toString = "Welcome to GeeksForGeeks."
}
 
// Creating object of class GFG
object GFG
{
    // Creating object   
    val gfg = new GFG
    def getObject = gfg
}
 
object SingletonTest extends App
{
 
  // this won't compile
  // val gfg = new GFG
  // this works
  val gfg = GFG.getObject
  println(gfg)
}

输出

Welcome to GeeksForGeeks.

正如我们在上面的例子中看到的,在类名和构造函数参数列表之间使用了 private 关键字。 val gfg = new GFG (这行代码)甚至不会被编译,因为主构造函数是private的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程