Scala语言基础讲义.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.4 apply方法和update方法 我们经常会用到对象的apply方法和update方法,虽然我们表面上并没有察觉,但是,实际上,在Scala中,apply方法和update方法都会遵循相关的约定被调用,约定如下: 用括号传递给变量(对象)一个或多个参数时,Scala 会把它转换成对apply方法的调用 当对带有括号并包括一到若干参数的对象进行赋值时,编译器将调用对象的update方法,在调用时,是把括号里的参数和等号右边的对象一起作为update方法的输入参数来执行调用 3.4 apply方法和update方法 下面我们测试一下apply方法是否被调用。删除并重新创建test.scala文件,输入以下代码: 在Linux系统的Shell命令提示符下运行scala命令: 运行后会得到以下结果: 3.4 apply方法和update方法 上面是类中定义了apply方法,下面看一个在单例对象中定义apply方法的例子: 把上面代码放入到test.scala文件中测试执行后,可以得到如下结果: 可以看出,在执行TestApplySingleObject(Zhangfei, Liubei)时调用了apply方法,并且把“Zhangfei and Liubei”作为返回值,赋值给group变量,因此,println(group)语句会打印出“Zhangfei and Liubei”。 3.4 apply方法和update方法 下面我们测试一个伴生类和伴生对象中的apply方法实例。删除并重新创建test.scala文件,输入以下代码: 执行结果如下: 3.4 apply方法和update方法 首先使用scalac编译命令对test.scala进行编译,然后,使用scala命令运行,具体如下: 上述代码执行后得到以下结果: 从上面代码可以看出,当我们执行val a = ApplyTest()时,会导致apply方法的调用并返回该方法调用的值,也就是ApplyTest的实例化对象。当执行a()时,又会导致调用伴生类的apply方法,如果我们愿意,就可以在伴生类的apply方法中写入一些处理逻辑,这样就可以把传入的参数赋值给实例化对象的变量。 3.4 apply方法和update方法 下面看一个apply方法的例子。由于Scala中的Array对象定义了apply方法,因此,我们就可以采用如下方式初始化一个数组: 也就是说,不需要new关键字,不用构造器,直接给对象传递3个参数,Scala就会转换成对apply方法的调用,也就是调用Array类的伴生对象Array的apply方法,完成数组的初始化。 3.4 apply方法和update方法 实际上,update方法也是类似的,比如: 从上面可以看出,在进行元组赋值的时候,之所以没有采用Java中的方括号myStrArr[0],而是采用圆括号的形式,myStrArr(0),是因为存在上述的update方法的机制。 3.3 继承 3.3.1 Scala与Java在继承方面的区别 3.3.2 抽象类 3.3.3 扩展类 3.3.1 Scala与Java在继承方面的区别 Scala中的继承与Java有着显著的不同: (1)重写一个非抽象方法必须使用override修饰符。 (2)只有主构造器可以调用超类的主构造器。 (3)在子类中重写超类的抽象方法时,不需要使用override关键字。 (4)可以重写超类中的字段。 Scala和Java一样,不允许类从多个超类继承 3.3.2 抽象类 以汽车为例子,首先我们创建一个抽象类,让这个抽象类被其他类继承。 关于上面的定义,说明几点: (1)定义一个抽象类,需要使用关键字abstract。 (2)定义一个抽象类的抽象方法,也不需要关键字abstract,只要把方法体空着,不写方法体就可以。 (3)抽象类中定义的字段,只要没有给出初始化值,就表示是一个抽象字段,但是,抽象字段必须要声明类型,比如:val carBrand: String,就把carBrand声明为字符串类型,这个时候,不能省略类型,否则编译会报错。 3.3.3 扩展类 抽象类不能直接被实例化,所以,下面我们定义几个扩展类,它们都是扩展了Car类,或者说继承自Car类。 3.3.3 扩展类 下面,我们把上述代码放入一个完整的代码文件test.scala,编译运行。 执行后,屏幕上会显示以下结果: 3.3.3 扩展类 在Shell命令提示符下输入scala命令运行上面代码: 执行后,屏幕上会显示以下结果: 3.4 特质(trait) 3.4.1 特质概述 3.4.2 特质的定义 3.4.3 把特质混入类中 3.4.4 特质可以包含具体实现 3.4.5 把多个特质混入类中 3.4.1 特质

文档评论(0)

benzei244572 + 关注
实名认证
内容提供者

建筑工程师持证人

没啥好说的额

领域认证该用户于2024年10月16日上传了建筑工程师

1亿VIP精品文档

相关文档