scala单例对象、伴生对象

scala单例对象
单例是一种只能有一个实例的对象
单例对象的成员、方法都默认是静态的,可以全局访问,共享全局变量很有意义
单例对象还可以扩展类和性状
与类不同的是,单例对象没有参数,单列对象可以拥有类的所有特性
需要注意的是,单例对象会在第一次被访问的时候初始化

import java.io._

class Point(val xc: Int, val yc: Int) {
   var x: Int = xc
   var y: Int = yc
   def move(dx: Int, dy: Int) {
      x = x + dx
      y = y + dy
   }
}

object Test {
   def main(args: Array[String]) {
      val point = new Point(10, 20)
      //Point.move(100,200)  
      //运行结果为110,220
      printPoint

      def printPoint{
         println ("x ====== : " + point.x);
         println ("y ====== : " + point.y);
      }
   }
}

在这里插入图片描述 在这里插入图片描述
scala伴生对象
当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。
你必须在同一个源文件里定义类和它的伴生对象。
类被称为是这个单例对象的伴生类:companion class。
类和它的伴生对象可以互相访问其私有成员。

// 伴生对象,与类名字相同,可以访问类的私有属性和方法
object ObjectOps {
//伴生类
class Fish private(val name:String)
{
  private def getlove() = name + "  like " + Fish.sky
}

object Fish {
  private val sky = "the sky"
  private val fish = new Fish("the fish")
  def printlover =println(fish.getlove())
}

  def main(args: Array[String]): Unit = {
    Fish.printlover
  }
}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值