对象

Object,相当于class单个实例,通常在里面放一些静态的filed或method

第一次调用object方法时候,就会执行object的constructor,也就是Object中不在method中的代码,但是Object不能定义接收参数的constructor

注意,Object的constructor只会在第一次被调用的时执行一次,以后再次调用就不会执行construtctor了

object通常作为单例模式来实现,或者存放静态成员,例如:

object Person{
private var eyeNum =2
prinln("this is person object")
df getEyeNum = eyeNum
} Person.eyeNum #报错
person.getEyeNum #返回 this is person object 和 2
person.getEyeNum #在一次执行这个方法的时候 返回2 Object对象的构造代码只在第一次执行的时候调用 以后不调用

伴生对象

如果有一个class还有一个与class同名的object,那么就称这个object是class的伴生对象,class是object的伴生类

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

伴生类和伴生对象最大的特点就是,互相可以访问private field

Object Person{
private var eyeNum =2
def getEyeNum =eyeNum
} class Person(val name:Stirng,val age:int){
def sayHello = prinln("Hi"+name+"i konw you "+age+"years old and usually you must have"+Person.eyeNum+"eyes")

让Object继承抽象类

object的功能其实和class很类似,除了不能定义接收参数的constructor之外

object也可以继承抽象类,并覆盖抽象类中的方法

abstract class Hello(val message:String){

  def sayHello(name:String):Unit

}

Object HelloImpl extends Hello ("hello"){

  override def sayHello(name:String)={

  println(message+","+name)

  }
}

apply方法

object中非常重要的一个特殊方法,就是apply方法

通常伴生对象中事项apply方法,并其中实现构造伴生类的对象功能

而创建伴生类的对象时,通常不会使用new Class的方法,而是使用Class()的方式,隐式的调用伴生对象的apply方法,这样会让对象创建更简洁

val a  = array(1,2,3,4,5)

class Person(val name:String)

object Person(val name:String){
def apply(name:String) =new Person(name)
}

用Object来实现枚举功能

scala没有直接提供类似java中的枚举特性们如果要实现枚举慢则需要用object继承Enumeration类,并且调用Value方法来初始化枚举值

obejc Season extends Enumeration{
val SPRING ,SUMMER,AUTUMN,WINTER = Value
} //还可以通过Value传入枚举值得id和name,通过id和toString可以获取,还可以通过id和name来查找枚举值 object Season extends Enumeration{
val SPRING = Value(0,"spring")
val SUMMER =Value(1,"summer")
val AUTUMN =Value(2,"autumn")
val WINTER = Value(3,"winter")
}
Season(0) #获取spring
Season.withName("spring") #3
//使用枚举Object values可以遍历枚举值
for( ele <- Season.values) println(ele)

Scala编程入门---面向对象编程之对象的更多相关文章

  1. Scala编程入门---面向对象编程之Trait高级知识

    trait调用链 Scala中支持让类继承多个Trait后,依次调用多个Trait中的同一个方法,只要让多个trait的同一个方法中,在最后都执行super.方法即可 类中调用多个trait中都有这个 ...

  2. Scala编程入门---面向对象编程之Trait

    Scala中Trait是一种特殊概念 首先我们可以将Triat做为接口来使用,此时的Triat就与java中的接口非常相似 在Triat中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出具体的 ...

  3. 8、scala面向对象编程之对象

    1.  Object 2.伴生对象 3.让object继承抽象类 4.apply方法 5.main方法 6.用object实现枚举功能 1.  Object Object,相当于class的单个实例, ...

  4. Scala 面向对象编程之对象

    此对象非彼java bean对象 是scala object的对象 Object // object,相当于class的单个实例,通常在里面放一些静态的field或者method // 第一次调用ob ...

  5. Scala编程入门---函数式编程

    高阶函数 Scala中,由于函数时一等公民,因此可以直接将某个函数传入其他函数,作为参数.这个功能是极其强大的,也是Java这种面向对象的编程语言所不具备的. 接收其他函数作为函数参数的函数,也被称作 ...

  6. scala学习笔记-面向对象编程之Trait

    将trait作为接口使用 1 // Scala中的Triat是一种特殊的概念 2 // 首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似 3 // 在triat中可 ...

  7. JS面向对象编程之对象

    在AJAX兴起以前,很多人写JS可以说都是毫无章法可言的,基本上是想到什么就写什么,就是一个接一个的函数function,遇到重复的还得copy,如果一不小心函数重名了,还真不知道从何开始查找错误,因 ...

  8. Scala编程入门---函数式编程之集合操作

    集合的函数式编程: 实战常用: //map案例实战:为List中的每个元素都添加一个前缀. List("leo","Jen","peter" ...

  9. Scala编程入门---Map与Tuple

    创建Map //创建一个不可变的Map val ages = Map("Leo" -> 30,"Jen" ->25,"Jack" ...

随机推荐

  1. “XcodeGhost”病毒之后,苹果更应注…

    虽然大家都在期待中秋假期的到来,不过让开发者挺闹心的一件事就是这几天网上.朋友圈以及各种群中炒得沸沸扬扬的"XcodeGhost"病毒事件,就连央视也惊动了!! 事件起源 事件起源 ...

  2. 使用批处理文件(*.bat)同时打多个cmd窗口

    使用批处理文件(*.bat)同时打多个cmd窗口 最近在研究zookeeper,在本地建了几个目录,发现频繁的去各个目录启动zkServer.cmd十分繁琐,于是乎google,才有了下文: 使用批处 ...

  3. Android进阶(十二)Fragment VS Activity

    Fragment  VS  Activity Android是在Android 3.0 (API level 11)开始引入Fragment的. 可以把Fragment想成Activity中的模块,这 ...

  4. my project 中git使用过程(基本操作流程)

    1.g  it clone git@name:server/BM/APPS.git 则BM_APPS.git项目被下载到当前目录下了,这时git@name:server/BM/APPS.git就是自己 ...

  5. Errors running builder 'Integrated External Tool Builder' on project xxx

    出现这样的提示,表明你的项目的Builder项出了问题. 解决方法是: 右键项目选择"Properties",再选择"Builders",删除丢失的builde ...

  6. 打包volley

    1.如果电脑没有安装git和ant的话,需要安装git和ant,直接Google就可以,并配置环境变量 2.在命令行执行 git clone https://android.googlesource. ...

  7. ffdshow 源代码分析 7: libavcodec视频解码器类(TvideoCodecLibavcodec)

    ===================================================== ffdshow源代码分析系列文章列表: ffdshow 源代码分析 1: 整体结构 ffds ...

  8. 一个很不错的支持Ext JS 4的上传按钮

    以前经常使用的swfUpload,自从2010年开始到现在,很久没更新了.而这几年,flash版本已经换了好多个,所以决定抛弃swfupload,使用新找到的上传按钮. 新的上传按钮由harrydel ...

  9. Linux本地网络脚本配置(内网与外网)

    脚本位于:     /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 //网卡的名字 BOOTPROTO=static // none静态IP ...

  10. AngularJS进阶(八)实现页面跳转并进行参数传递

    angularjs实现页面跳转并进行参数传递 注:请点击此处进行充电! Angular页面传参有多种办法,我在此列举4种最常见的: 1. 基于ui-router的页面跳转传参 (1) 在Angular ...