zoukankan      html  css  js  c++  java
  • Scala编程入门---面向对象编程之对象

    对象

    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)
  • 相关阅读:
    分布式配置 SSH 免密登陆
    转载--宏观认识大数据圈
    转载--存储是怎样炼成的
    转载--关于hdfs
    绕不开的hadoop
    sqoop 使用
    Excel VBA解读(54):排序——Sort方法
    MSSQL附加数据库时提示以下错误: 无法打开物理文件“***.mdf”。操作系统错误 5:“5(拒绝访问。)”。 (Microsoft SQL Server,错误: 5120)
    Delphi Code Editor 之 编辑器选项
    解决StrToDateTime()不是有效日期类型的问题
  • 原文地址:https://www.cnblogs.com/yeszero/p/6952266.html
Copyright © 2011-2022 走看看