八、scala面向对象编程之对象

一、  Objectjava

二、伴生对象app

三、让object继承抽象类工具

四、apply方法spa

五、main方法命令行

六、用object实现枚举功能scala

一、  Object

  Object,至关于class的单个实例,一般在里面放一些静态field或者method。3d

  第一次调用object方法时,会执行object的constructor,也就是object内不在method中的代码,可是object不能定义接受参数的constructor。对象

  Object的constructor只会在其第一次被调用时执行一次,之后再次调用就不会再次执行constructor了。blog

  一般object用于单利模式的实现,或者放class的静态成员,好比工具方法。继承

  

二、伴生对象

  若是有一个class,还有一个与class同名的object,那么就成这个object是class的伴生对象,class是object的伴生类。

  伴生类和伴生对象必须存放在一个.scala文件中。

  伴生类和半生对象,最大的特色就在于,互相能够访问private field。

   

三、让object继承抽象类

  Object功能其实和class相似,除了不能接受定义接受参数的constructor以外,object也能够继承抽象类,并覆盖抽象类中的方法。

  

四、apply方法

  Object中很是重要的一个特殊方法,就是apply方法。一般在伴生对象中实现apply方法,并在其中实现构造伴生类的对象的功能。而建立伴生类的对象时,一般不会使用new Class 的方式,而是使用Class()的方式,隐式调用伴生对象的apply方法,让对象建立更加简洁。

  

五、main方法

  和java同样,若是运行一个程序,必须编写一个包含main方法类同样,scala中若是运行一个应用程序,也必须有一个main方法,做为入口。

  Scala中main方法定义为def main(args:Array[String]),并且必须定义在object中。

  新建一个文件HelloWorld.scala,写入如下内容:

  object HelloWorld{

    def main(args:Array[String]){

      println("Hello World!!!")

    }

  }

  编译scalac HelloWorld.scala 

  运行 scala HelloWorld

  显示运行花费的时间 scala –Dscala.time HelloWorld

 

  除本身实现main方法外,还能够继承App Trait,而后将须要在main方法中运行的代码,直接做为object的constructor代码,并且用args能够接受传入的参数。

  object HelloWorld extends App{

         if(args.length>0) println("hello, " + args(0))

         else println("Hello World!!!")

  }

  编译 scalac HelloWorld.scala 

  运行 scala HelloWorld scala HelloWorld LiLei

  App Trait工做原理:App Trait继承自DelayedInt Trait,Scala命令行进行编译时,会把继承App Trait的object的constructor代码都放到DelayedInt Trait的delayedInit方法中执行。

六、用object实现枚举功能

  Scala没有直接提供相似java的Enum这样的枚举特性,若是要实现枚举,则须要用object继承Enumeration类,而且调用Value方法来初始化枚举值。

  

  能够经过value传入枚举值得id和name,经过id和toString能够获取,还能够经过Id和name来查找枚举值。 

  

相关文章
相关标签/搜索