Scala类的构造器与访问器 红太狼 2022-08-18 11:56 210阅读 0赞 # 1.构造器 # 在Scala中,每个类都有一个主构造器。主构造器与类的定义交织在一起,如下: class Person ( private var _name: String, private var _age: Int) 主构造器会执行类定义中的所有语句。如下,println语句是主构造器的一部分,当类被实例化时,println语句会立即执行。 class Person private( private var _name: String, private var _age: Int){ println("This class is Person") } 通过把private修饰符添加在类参数列表的前边把主构造器隐藏起来。如: class Person private( private var _name: String, private var _age: Int) 这样客户代码将不能调用Person类的主构造器,如果需要设置主构造器中的参数,有两种方案:一是添加辅助构造器,二是用伴生对象的apply工厂方法。 **辅助构造器** 在Scala类中,有一个主构造器,但可以有任意个辅助构造器。并且,辅助构造器有两个特点: 1. 辅助构造器的名称是this; 2. 每个辅助构造器都必须以一个对先前已定义的其他辅助构造器或主构造器的调用开始。 辅助构造器如下定义: def this(age: Int) = this("xx", age) **伴生对象的apply工厂方法** 在存放这个类的同一个源文件中,定义它的伴生对象。伴生对象与类具有相同的访问权限,因此,即使Person类的构造器是私有的,对象Person的apply方法也可以创建新的Person对象。如: object Person{ def apply[T](name: String, age: Int) = new Person(name, age) } **注意:辅助构造器只能访问主构造里定义的变量,而不能访问类里定义的变量。** # 2.访问器 # 和Java一样,Scala也有setter和getter访问器。在Scala里,对象的每个非私有的var类型成员变量都隐含定义了setter和getter方法。但是setter和getter方法的命名方式并没有沿袭Java的约定。在Scala中,var变量x的getter方法命名为“y”,setter方法命名为“y\_=”(一般情况下,为了代码的可读性,y和x是一样的)。如: class Person { private var _name: String = _ private[this] var _age: Int = _ //类里定义的变量,不能用构造器初始化。 private var _address: String = _ //getter def name: String = _name //setter def name_= (name: String): Unit = { _name = name } //getter def age: Int = _age //setter def age_= (age: Int): Unit = { _age = age } } 另外,setter和getter访问器不仅可以访问类里面定义的var变量,而且还可以访问主构造器里的var变量,而且getter方法既可以访问var变量,也可以访问val变量(因为val变量不可变,所以没有setter)。如: class Person private( private var _name: String, private var _age: Int){ //类里定义的变量,不能用构造器初始化。 private var _address: String = _ def this(age: Int) = this("xx", age) //getter def name: String = _name //setter def name_= (name: String): Unit = { _name = name } //getter def age: Int = _age //setter def age_= (age: Int): Unit = { _age = age } //getter def address: String = _address //setter def address_= (address: String): Unit = { _address = address } } **注意:getter和setter方法获取了原var变量的可见性。如var变量定义为public,则其getter和setter也是public;var变量定义为protected,则其getter和setter也是protected。**
相关 Java中的子类构造器会调用父类构造器 说在前面: 每个类都会有一个默认的构造器(隐式的),但如果我们重新写了一个构造器,默认的隐式构造器就会被覆盖(就没用了),除非我们再显示的定义以下,如下代码所示: 桃扇骨/ 2024年03月30日 12:01/ 0 赞/ 68 阅读
相关 类与对象 --- 构造器(构造方法、Constructor) 作用:产生对象 语法: 访问修饰符 类名(形参列表) \{ ...... \} 语法细节: 1、没有返回类型,连void都没有; 2、如果不写,编 墨蓝/ 2023年09月29日 08:48/ 0 赞/ 12 阅读
相关 Scala主构造器和辅助构造器 类比下 Java构造器 Java构造器 基本语法 [修饰符] 方法名(参数列表) { 构造方法体 } 细节说明 1)在 Java 中一个 忘是亡心i/ 2023年01月13日 14:59/ 0 赞/ 194 阅读
相关 Scala系列12:Scala主构造器与辅助构造器使用详解与演示 0.类的构造器 跟Java一样,当我们创建类对象的时候,会自动调用类的构造器。之前我们创建类对象没有显示调用构造器,那是因为之前使用的都是默认构造器,此 Dear 丶/ 2022年12月03日 13:09/ 0 赞/ 190 阅读
相关 Scala类的构造器与访问器 1.构造器 在Scala中,每个类都有一个主构造器。主构造器与类的定义交织在一起,如下: class Person ( private var 红太狼/ 2022年08月18日 11:56/ 0 赞/ 211 阅读
相关 Scala中的类和构造器 Scala中的类 摘要 网络上很多资料讲得不清不楚的,有些甚至是片面的错误的,看语言应该是直接用翻译器将英文翻译成中文。所以依照着网上的一些说法和自己的实验重新将一 桃扇骨/ 2022年06月01日 09:38/ 0 赞/ 208 阅读
相关 Scala类的概述、类的定义、主构造器、辅助构造器 09 1. Scala类的定义 在Scala中,类并不声明为public类型,Scala源文件中可以包含多个类,所以这些类都具有共有可见性 用val修饰的变量是可读 客官°小女子只卖身不卖艺/ 2022年02月02日 03:39/ 0 赞/ 394 阅读
相关 scala构造器 [2019独角兽企业重金招聘Python工程师标准>>> ][2019_Python_] ![hot3.png][] object ConstructorTest \{ 墨蓝/ 2022年01月14日 01:21/ 0 赞/ 274 阅读
相关 笔试题总结——Java继承中子类构造器与父类构造器的关系 笔试题总结——Java继承中子类构造器与父类构造器的关系 1、举两个栗子 > 代码1 class Person { public 淩亂°似流年/ 2021年11月01日 06:34/ 0 赞/ 315 阅读
还没有评论,来说两句吧...