- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北风网项目实战培训 // object,相当于class的单个实例,通常在里面放一些静态的field或者method // 第一次调用object的方法时,就会执行object的constructor,也就是object内部不在method中的代码;但是object不能定义接受参数的constructor // 注意,object的constructor只会在其第一次被调用时执行一次,以后再次调用就不会再次执行constructor了 // object通常用于作为单例模式的实现,或者放class的静态成员,比如工具方法 object Person { private var eyeNum = 2 println(this Person object!) def getEyeNum = eyeNum } object // 如果有一个class,还有一个与class同名的object,那么就称这个object是class的伴生对象,class是object的伴生类 // 伴生类和伴生对象必须存放在一个.scala文件之中 // 伴生类和伴生对象,最大的特点就在于,互相可以访问private field object Person { private val eyeNum = 2 def getEyeNum = eyeNum } class Person(val name: String, val age: Int) { def sayHello = println(Hi, + name + , I guess you are + age + years old! + , and usually you must have + Person.eyeNum + eyes.) } 伴生对象 // object的功能其实和class类似,除了不能定义接受参数的constructor之外 // object也可以继承抽象类,并覆盖抽象类中的方法 abstract class Hello(var message: String) { def sayHello(name: String): Unit } object HelloImpl extends Hello(hello) { override def sayHello(name: String) = { println(message + , + name) } } 让object继承抽象类 // object中非常重要的一个特殊方法,就是apply方法 // 通常在伴生对象中实现apply方法,并在其中实现构造伴生类的对象的功能 // 而创建伴生类的对象时,通常不会使用new Class的方式,而是使用Class()的方式,隐式地调用伴生对象得apply方法,这样会让对象创建更加简洁 // 比如,Array类的伴生对象的apply方法就实现了接收可变数量的参数,并创建一个Array对象的功能 val a = Array(1, 2, 3, 4, 5) // 比如,定义自己的伴生类和伴生对象 class Person(val name: String) object Person { def apply(name: String) = new Person(name) } apply方法 // 就如同java中,如果要运行一个程序,必须编写一个包含main方法类一样;在scala中,如果要运行一个应用程序,那么必须有一个main方法,作为入口 // scala中的main方法定义为def main(args: Array[String]),而且必须定义在object中 object HelloWorld { def main(args: Array[String]) { println(Hello World!!!) } } // 除了自己实现main方法之外,还可以继承App Trait,然后将需要在main方法中运行的代码,直接作为object的constructor代码;而且用args可以接受传入的参数 object HelloWorld extends App { if (args.length 0) println(hello, + args(0)) else println(Hello World!!!) } main方法 // 如果要运行上述代码,需要将其放入.scala文件,然后先使用scalac编译,再用scala执行 scalac HelloWorld.sca
文档评论(0)