scala-构造函数(代码片段)

shimingjie shimingjie     2023-03-08     263

关键词:

/*
scala的构造函数分为主构造函数和辅助构造函数。

一、主构造函数
在Scala中,每个类都有主构造函数,和类的定义交织在一起。
一个Scala类的主构造函数包括:1、构造函数的参数;2、类体中调用的方法;3、在类体中执行的语句和表达式。
如果类名之后没有参数,则该类具备一个无参主构造函数,这样一个构造函数仅仅是简单地执行类体中的所有语句。

二、辅助构造函数
1.辅助构造函数的名称为this,这主要是考虑到在C++和Java中,构造函数名与类名同名,当更改类名时需要同时修改构造函数名,因此使用this为构造函数名使程序可靠性更强;
2.每一个辅助构造函数都必须以一个对先前已定义的其他辅助构造函数或主构造函数的调用开始

三、Scala提供一个主构造函数和任意多个辅助构造函数
1.如果不指定主构造函数,编译器将创建一个主构造函数的构造函数,所有类的主体的声明都被视为构造函数的一部分。它也被称为默认构造函数。
2.如果代码只有一个构造函数,则可以不需要定义明确的构造函数。它有助于优化代码,可以创建具有零个或多个参数的主构造函数。
3.必须要从辅助构造函数内部调用主构造函数。this关键字用于从其他构造函数调用构造函数。当调用其他构造函数时,要将其放在构造函数中的第一行。
4.在scala中,可以重载构造函数。

四、主构造函数的参数(类参数)
1.在主构造函数的参数列表中声明的参数和在类体中声明的变量本质上没有任何不同;
2.如果只有var/val修饰,则字段总是对外可见的,即默认是public的
3.如果连var/val也没有,则字段对外不可见,同时内部只读,不可改写,即默认是:private val
4.上一条不适用于case class,case class的类参数在不指定val/var修饰时,会自动编译为public val,即对外只读,如果需要case class的字段外部可写,可以显式地指定var关键字!

五、类字段的getter/setter
1.对于var修饰的参数:外部可读/可改写 (实际上是:编译器为该类参数(字段)自动生成了getter和setter)
2.对于val修饰的参数:外部可读/不可改写(实际上是:编译器为该类参数(字段)只生成了getter没有生成setter)
3.对于private var修饰的参数:内部可读/可改写 (编译器不会为私有类参数(字段)自动生成getter和setter)
4.对于private val修饰的参数:内部可读/不可改写 (编译器不会为该类参数(字段)自动生成getter和setter)
*/

/**
  * 重写 :可以重写成员变量和成员方法(重写字段或者方法)
  * 子类继承父类
*/

class Person(val name : String,var age : Int) 
  println("The primarry constructor of Person")
  val school = "BJU"

  def sleep = "8 hours"

  override def toString = "I am a person !"


/**
  * woker 继承自person ,name,age,salary是woker的成员变量
  * 子类必须把父类的主构造器中的参数都填充满(和java不同:继承时采用 super使用父类的成员)
*/
class Worker(name : String ,age : Int ,val salary :Long ) extends Person(name,age)

  println("This is the subClass of person,primary constructor of woker")

  override val school = "Spark" // 复写字段或者是方法都要进行 添加重写 

  override def toString = "I am a worker !" + super.sleep


object Person 
  def main(args: Array[String]): Unit = 
    //构建时 先构建父类
    val w  = new Worker("spark",5,100000)

    println("School :" +w.school )
    println(w.toString())
  

 




















scala:是否可以使用宏注释来注释类的构造函数字段?(宏观天堂)(代码片段)

我试图使用宏注释来注释类的构造函数值。假设实现了一个名为@identity的宏注释,并在类A的类定义中使用如下:classA(@identityvalfoo:String,//causeserrorvalbar:String)@identityvalfoobar:String=""//doesn'tcauseerror当只是注释foobar时,一切都编译得很... 查看详情

scala基础:类和对象访问修饰符和构造器(代码片段)

章节目标掌握类和对象的定义掌握访问修饰符和构造器的用法掌握main方法的实现形式掌握伴生对象的使用掌握定义工具类的案例1.类和对象Scala是一种函数式的面向对象语言,它也是支持面向对象编程思想的,也有类和对象的... 查看详情

scala基础语法之trait详解(代码片段)

...la中的方法和函数Scala基础:类和对象、访问修饰符和构造器Scala的继承和抽象类本章节目标能够使用trait独立完成适配器,模板方法,职责链设计模式能够独立叙述trait的构造机制能够了解trait继承class的写法能够独立 查看详情

找不到类型[simpletype,classdefinition]的合适构造函数(代码片段)

我用Jackson框架编写了一个Scala程序来读取Json文件。执行Scala程序时,我收到以下错误。任何人都可以建议我如何克服这个错误。错误Exceptioninthread"main"com.fasterxml.jackson.databind.JsonMappingException:Nosuitableconstructorfoundfortype[simpletype,classD... 查看详情

java示例代码_Scala和Java的混合:如何正确获取泛型构造函数参数

java示例代码_Scala和Java的混合:如何正确获取泛型构造函数参数 查看详情

scala碎片内容(代码片段)

objectCaseClassDemodefmain(args:Array[String]):Unit=//定义样例类//默认带有apply方法//构造函数的参数默认是publicval修饰的caseclassMessage(varsender:String,recipient:String,body:String)//创建一个样例类的对象valmessage1=Message("jerry" 查看详情

scala-构造函数

packagecom.bigdata/*scala的构造函数分为主构造函数和辅助构造函数。一、主构造函数在Scala中,每个类都有主构造函数,和类的定义交织在一起。一个Scala类的主构造函数包括:1、构造函数参数;2、在类内部被调的方法;3、在类内... 查看详情

scala中的类和对象(代码片段)

...法。5.class是scala中的类,类可以传参,传参就有了默认的构造函数。类中的属性默认就有getter,setter方法。重写构造,第一行要调用默认的构造6.当new一个class时,类中除了方法不执行,其他都执行。同一个包下,class的名称不能... 查看详情

如何创建不调用底层对象的构造函数的scalamock存根?(代码片段)

...n,因为即使我正在创建一个存根,它仍然会调用BrokenClass构造函数的“s.length”行。所以它试图取消引用“s”,它是null,因为我没有传递任何东西,因为我想要的是一个存根,在调用特定方法时返回一个特定的值。有没有办法... 查看详情

scala模式匹配(代码片段)

...:Array[Int]=Array(1,2,3,4)匿名函数,由繁入简, 使用case语句构造匿名函数的“额外”好处, case语句(组合)除了可以被编译为匿名函数(类型是FunctionX,在Scala里,所有的函数字面量都是一个对象,这个对象的类型是Functio... 查看详情

scala面向对象和模式匹配(代码片段)

...laTest.name)ScalaTest.sleep("Tom睡得很香!")结果:二、scala类与构造器的使用scala中主构造器:定义在类名后面的构造器叫主构造器scala辅助构造器:定义在class类中,可以有多个辅助构造器如果主构造器中成员变量属性没有被valvar修饰... 查看详情

Scala中类型构造函数和参数化类型边界之间的区别

】Scala中类型构造函数和参数化类型边界之间的区别【英文标题】:DifferencebetweentypeconstructorsandparametrizedtypeboundsinScala【发布时间】:2021-06-2407:38:52【问题描述】:看看下面的代码:caseclassMyTypeConstructor[T[_]:Seq,A](mySeq:T[A])defmap[B](f:... 查看详情

scala的继承和抽象类(代码片段)

...la中的方法和函数Scala基础:类和对象、访问修饰符和构造器本章节目标掌握继承和抽象类相关知识点掌握匿名内部类的用法了解类型转换的内容掌握动物类案例1.继承1.1概述实际开发中,我们发现好多类中的内容是相似的(例... 查看详情

scala的面向对象(代码片段)

...能被访问,取决于修饰符,public(默认),private(2)类的构造器//在类上声明的是主构造器classStudent(valname:String,valage:Int)//使用this为方法名,这个是辅助构造器defthis(name:String,age:Int)this(name,age)主构造器的注意点:?-在类上定义的构... 查看详情

scala类的构造器与访问器(代码片段)

1.构造器在Scala中,每个类都有一个主构造器。主构造器与类的定义交织在一起,如下:classPerson(privatevar_name:String,privatevar_age:Int)主构造器会执行类定义中的所有语句。如下,println语句是主构造器的一部分,当类被实例化时,prin... 查看详情

重学scala:scala中的变量方法函数(代码片段)

...scala中的块表达式8、循环1、for循环2、while循环9、方法和函数1、方法2、函数3、方法和函数的区别4、方法转换为函数提示:代码实例重点在于讲解知识点上,代码相对简单,部分代码使用scalashell 查看详情

scala类

 class 1》scala类通过newA() 2》辅助构造函数用this()并且必须调用构造函数。并且第一行就要调用。 3》构造函数写法 和java不同classPerson(name:String,age:Int){}?创建类同时定义构造函数。4》主要构造函数的方法体?&nbs... 查看详情

scalaobject(代码片段)

...通过new来创建对象,直接通过类名创建3、没有有参的主构造器,但是有主构造代码块(不包含在任何方法中的代码,就是object的主构造代码块)4、通常用于封装一些常量、工具类、枚举和隐式转换函数5、主构造代码块只会执行... 查看详情