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

  • 时间:
  • 浏览:0
  • 来源:大发快3官方直播—彩神UU快三代理

在主构造函数小节当中人们歌词 歌词 提到,有刚刚意味会禁用掉主构造函数,此时没办法 通过辅助构造函数来创建对象

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

意味将成员域定义为private[this],则不要生成getter、setter办法

1 类定义、创建对象

2 主构造器

3 辅助构造器

当主构造器的参数不要var或val修饰的刚刚,参数会生成类的私有val成员,一些不要产生getter和setter办法

意味类的成员域是val类型的变量,则只会生成getter办法

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

你也可不需用定义个人的getter和setter办法

从字节码文件中可不需用看出:val变量对应的是java中的final类型变量,只生成了getter办法

在一些状况下,意味需用禁用主构建器,代码如下:

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

主构造器的定义与类的定义交织在一直,将构造器参数直接贴到 去类名称刚刚,如下代码:

在java语言当中,在定义JavaBean的刚刚生成的有无setXxx()、getXxx()办法,但scala语言生成的getter办法和setter办法并有无原来 的,意味也需用守护进程自动会生成getter办法和setter办法,则需用引入 scala.reflect.BeanProperty

一些采用注解的办法修饰变量

3.1 人们歌词 歌词 首先看一下没办法 辅助构造函数的Person类

下面图给出了Scala中主构建器参数生成类成员和办法时的规则



来源:scala for the impatient

从字节码文件内容可不需用看多:人太好人们歌词 歌词 只在Person类中定义了2个多类成员(域)name,类型为String,但Scala会默认帮人们歌词 歌词 生成name()与name_=()及构造函数Person()。其中name()对应java中的getter办法,name_=()对应java中的setter办法(意味JVM中不允许再次出现=,好多好多 用$eq代替。值得注意的是定义的是公有成员,但生成的字节码中却是以私有的办法实现的,生成的getter、setter办法是公有的

一些,可不需用直接new操作创建Person对象

从生成的字节码中可不需用看出:(1)定义成私有成员,其getter、setter办法也是私有的;(2)直接能访问的是人们歌词 歌词 个人定义的getter、setter办法。下面给出的是调用办法

前面讲了,意味禁用掉了主构建器,则需用使用辅助构造函数来创建对象。辅助构造函数具2个多多特点:(1)辅助构建器的名称为this,java中的辅助构造函数与类名相同,这常常会意味修改类名时再次出现不少难题图片,scala语言出理 了原来 的难题图片;(2)调用辅助构造函数时,需用先调用主构造函数或其它意味定义好的构造函数。

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

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

主构造器会执行类定义中的所有说说,类似

Person类在编译有无生成Person.class文件



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

回过头来看说说,前面人们歌词 歌词 定义的Person类是三种生活无参主构建器

从代码执行产生的结果,人们歌词 歌词 可不需用知道:通过p.name=“john”这一 办法进行赋值,调用者无须需用知道是其通过办法调用还是字段访问来进行操作的,这便是著名的统一访问原则

下图给出的是getter、setter办法产生的规则



来源:scala for the impatient