Scala入门到精通——第六节:类和对象(一)

  • 时间:
  • 浏览:0
  • 来源:彩神大发快3_神彩大发快3官方

主构建器还能可不上能 使用默认参数

从字节码文件中能可不上能 看出:val变量对应的是java中的final类型变量,只生成了getter最好的最好的方式

在java语言当中,在定义JavaBean的很久生成的全是setXxx()、getXxx()最好的最好的方式,但scala语言生成的getter最好的最好的方式和setter最好的最好的方式并全是能可不上能了 的,因为也时需守护守护进程自动会生成getter最好的最好的方式和setter最好的最好的方式,则时需引入 scala.reflect.BeanProperty

很久采用注解的最好的最好的方式修饰变量

在什儿 状态下,因为时需禁用主构建器,代码如下:

主构造器的定义与类的定义交织在时不时,将构造器参数直接插进类名称很久,如下代码:

下图给出的是getter、setter最好的最好的方式产生的规则



来源:scala for the impatient

3.2 带主构造函数、辅助构造函数的Person类

打上去公众微信号,能可不上能 了解更多最新Spark、Scala相关技术资讯

主构造器中的参数还能可不上能 加访问控制符

1 类定义、创建对象

2 主构造器

3 辅助构造器

3.1 亲戚亲戚亲们首先看一下能可不上能了辅助构造函数的Person类

因为类的成员域是val类型的变量,则只会生成getter最好的最好的方式

在主构造函数小节当中亲戚亲戚亲们提到,有很久因为会禁用掉主构造函数,此时能可不上能了通过辅助构造函数来创建对象

从字节码文件内容能可不上能 看完:其实亲戚亲戚亲们只在Person类中定义了另有一一3个类成员(域)name,类型为String,但Scala会默认帮亲戚亲戚亲们生成name()与name_=()及构造函数Person()。其中name()对应java中的getter最好的最好的方式,name_=()对应java中的setter最好的最好的方式(因为JVM中不允许冒出=,所以用$eq代替。值得注意的是定义的是公有成员,但生成的字节码中却是以私有的最好的最好的方式实现的,生成的getter、setter最好的最好的方式是公有的

很久,能可不上能 直接new操作创建Person对象

从生成的字节码中能可不上能 看出:(1)定义成私有成员,其getter、setter最好的最好的方式也是私有的;(2)直接能访问的是亲戚亲戚亲们此人 定义的getter、setter最好的最好的方式。下面给出的是调用最好的最好的方式

主构造器会执行类定义中的所有话语,例如

你可不上能可不上能 定义此人 的getter和setter最好的最好的方式

从代码执行产生的结果,亲戚亲戚亲们能可不上能 知道:通过p.name=“john”有一种 最好的最好的方式进行赋值,调用者暂且时需知道是其通过最好的最好的方式调用还是字段访问来进行操作的,这便是著名的统一访问原则

因为将成员域定义为private[this],则不用生成getter、setter最好的最好的方式

Person类在编译全是生成Person.class文件



利用javap -prviate Person命令查看字节码文件内容,能可不上能 看得到以下内容

值得注意的是,将上述Person类中的toString()最好的最好的方式打上去,则类中无任何地方使用了主构造器的参数,此时主构造器参数不用生成类成员

下面图给出了Scala中主构建器参数生成类成员和最好的最好的方式时的规则



来源:scala for the impatient

回过头来看话语,前面亲戚亲戚亲们定义的Person类是有一种 无参主构建器

前面讲了,因为禁用掉了主构建器,则时需使用辅助构造函数来创建对象。辅助构造函数具有另有一一3个特点:(1)辅助构建器的名称为this,java中的辅助构造函数与类名相同,这常常会因为修改类名时冒出不少间题,scala语言处置了能可不上能了 的间题;(2)调用辅助构造函数时,时需先调用主构造函数或其它因为定义好的构造函数。

当主构造器的参数不用var或val修饰的很久,参数会生成类的私有val成员,很久不用产生getter和setter最好的最好的方式