Scala编程.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Scala编程

trait基础知识 将trait作为接口使用 在trait中定义具体方法 在trait中定义具体字段 在trait中定义抽象字段trait高级知识 为实例对象混入trait trait调用链 在trait中覆盖抽象方法 混合使用trait的具体方法和抽象方法 trait字段的初始化 让trait继承类将trait作为接口使用 scala中的trait是一种特殊的概念 首先我们可以将trait作为接口来使用,此时的trait就与java中的接口非常类似 在trait中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出方法的具体实现即可 类可以使用extends关键字继承trait,注意这里不是implement,而是extends在scala中没有implement的概念,无论继承类还是trait,统一都是extends 类继承trait后必须实现其中的抽象方法,实现时不需要使用override关键字 scala不支持对类进行多继承,但是支持多重继承trait,使用with关键字trait HelloTrait{ def method(name:String)}trait Hello2Trait{ def Hello2Trait(p:Person)}class Person(val name:String)extends HelloTrait with Hello2Trait with Cloneable with Serializable{ def method(name:String)=println(Hello+name) def Hello2Trait(p:Person)=println(Hi+name+p.name)}object Test_01 { def main(args: Array[String]): Unit = { val tr=new Person(张三) tr.method(A) tr.Hello2Trait(tr) } }在trait中定义具体的方法scala中的trait可以不是只定义抽象的方法,还可以定义具体方法,此时trait更像是包含了通用工具的东西有一个专有的名词来形容这种情况 ,就是说trait的功能混入了类trait中可以包含一些很多类都通用的功能方法,比如打印日志等等,spark中就使用了trait来定义通用的日志打印方法trait Logger{ def log(message:String)=println(message)}class Test_02(val name:String)extends Logger{ def test(){ log(name+日志) }}在trait中定义具体字段scala中的trait可以定义具体的field,此时继承trait的类就自动获得了trait中定义的field但是这种获得field的方式与继承class是不同的,如果是继承class类取的field,实际是定义在父类中的.而继承trait获取的field就直接被添加到类中trait Animal{ val t_name:String=字段}class Cat(val name:String)extends Animal{ def say=println(name+::+t_name)}在trait中定义抽象的字段scala中的trait可以定义抽象的field,而trait中的具体方法则可以基于抽象field来编写但是继承trait的类,则必须 覆盖抽象field提供具体的值在trait中定义val msg:String [没有赋值] 这就是抽象的字段在继续类中必须重写他val msg:String=”值”实例混入trait有时我们可以在创建类的对象时,指定该对象混入某个trait这样就只有这个对象混入该 trait的方法trait Logged{ def log(msg:String){}}trait MyLogged extends Logged{ override def log(msg:String){ println(log+msg) }}class MyTest(val name:String)extends Logged{ def test{ println(hi+name) log(我被执行了) }}object Test_03 { def main(args: Array[String]): Unit = { val my=new MyTest(張三) val my2=new MyTest(李四)with MyLogged//实例混入trait my2.test }}trait调用链scala中支持让类继承多个trait后,依次调用多个trait中的同一个方法

文档评论(0)

135****6041 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档