大数据 -- Scala:面向对象编程之对象

Scala中的object:

Scala是没有java中的静态成员的 。如果需要用到static变量、static 方法,就要用到Scala的单例对象object 。

注意:

使用object定义一个单例对象,可以用object作为工具类或存放常量

//单例对象只能有一个无参的主构造器,不能添加其他参数
object DateUtils {
  //在object中定义的成员变量,相当于java中定义的一个静态变量
  val simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm")

  //object单例对象的构造代码可以直接卸载花括号中
  println("构造代码")

  //相当于java中定义的静态方法
  def format(date:Date) = simpleDateFormat.format(date)

  def main(args: Array[String]): Unit = {
    println(DateUtils.format(new Date()))
  }
}

Scala中的伴生对象

  • 在同一个Scala文件中,有一个class和object具有同样的名字,那么就称这个object是class的伴生对象,class是object的伴生类 ; 
  • 伴生类和伴生对象的最大特点:可以相互访问

注意:

  • 伴生类和伴生对象可以互相访问private的属性
package com

class ClassObject {
    val id = 1
    private var name = "itcast"
    def printName(): Unit ={
      //在Dog类中可以访问伴生对象Dog的私有属性
      println(ClassObject.CONSTANT + name )
    }


  }

  object ClassObject{
    //伴生对象中的私有属性
    private val CONSTANT = "汪汪汪 : "
    def main(args: Array[String]) {
      val p = new ClassObject
      //访问私有的字段name
      p.name = "123"
      p.printName()
    }
}

Scala中object的apply方法:

val a = Array(1,2,3,4)      这种写法非常简便,不需要再写一个new,然后敲一个空格,再写类名。如何直接使用类名来创建对象呢?    

  • 实现伴生对象的apply方法  , 即object Person {def apply()xxx}
  • 伴生对象的apply方法用来快速创建一个伴生类的对象 

说明:

  • 当遇到类名(参数1, 参数2...)会自动调用apply方法,在apply方法中来创建对象
  • 定义apply时,如果参数列表是空,也不能省略括号(),否则引用的是伴生对象
class Person(var name:String,var age:Int) {
  override def toString: String = s"Person($name,$age)"
}

object Person {
  // 实现apply方法
  // 返回的是伴生类的对象
  def apply(name:String, age:Int): Person = new Person(name, age)

  // apply方法支持重载
  def apply(name:String):Person = new Person(name, 20)

  def apply(age:Int):Person = new Person("某某某", age)

  def apply():Person = new Person("某某某", 20)
}

object Main2 {
  def main(args: Array[String]): Unit = {
    val p1 = Person("张三", 20)
    val p2 = Person("李四")
    val p3 = Person(100)
    val p4 = Person()

    println(p1)
    println(p2)
    println(p3)
    println(p4)
  }
}

Scala中object的main方法:

  • scala和Java一样,如果要运行一个程序,必须有一个main方法
  • 而在Java中main方法是静态的,而在scala中没有静态方法 ,所以在scala中,这个main方法必须放在一个object中
  • 也可以继承自App Trait ,然后将需要编写在main方法中的代码,写在object的构造方法体内。其本质是调用了Trait这个特质中的main方法
    object Main2 extends App {
      println("hello, scala")
    }

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值