scala类与对象

类与对象

类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。

在Scala中,我们必须初始化字段,方法默认是共有的,类并不声明为public,一个Scala源文件中可以有多个类。类的最简单的形式和Java或C++相似,例如用Class定义一个名为Counter的类:

class Counter {
  private var value = 0
  def increment() { value += 1}
  def current() = value
}

类能够构造对象,并按照通常的方式来调用方法,我们可以使用new关键字来创建类的对象。调用无参数的方法时,我们也可以不写()

val myCounter = new Counter() // or new Counter
myCounter.increment() // or myCounter.increment

单例对象

在Scala中没有静态方法或静态字段,但是它也为我们提供了单例模式的实现方法,那就是使用关键字object。Scala中使用单例模式时,除了定义的类之外,还要定义一个同名的object对象,它和类的区别是,object对象不能带参数。

伴生对象

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

类的两种属性

类中的字段自动带有getter方法和setter方法,可以用那个定制的方法替换掉字段的定义,而不必修改实用类的客户端,达到“统一访问原则”。

创建类的对象

class Counter {
  // 声明私有成员变量
  private var value = 0
  // 配置成员函数,该函数作用为将value成员变量的值增加1
  def increment() { value += 1} 
  // 配置成员函数,该函数将会将成员变量value的值返回
  def current() = value 
}
val myCounter = new Counter()
// 生成一个Counter类对象myCounter,并调用其成员函数increment(),myCounter对象刚创建时,其value变量的值为0,由于调用了increment()函数,value的值变为1
myCounter.increment()
// 调用myCounter对象中的current()函数,将该函数的返回值输出,结果为myCounter对象中value的值 
println(myCounter.current) 

创建单例对象

// 生成一个object类,也叫单例对象
object Accounts {
  // 声明私有成员变量lastNumber
  private var lastNumber = 0
  // 定义成员函数,其作用为将lastNumber成员变量值增加1,并输出
  def newUniqueNumber() = { lastNumber += 1;  println(lastNumber)} 
}
// 调用单例对象的newUniqueNumber()成员变量方法
Accounts.newUniqueNumber() 

创建伴生对象

// 声明类
class test_companionObj {
  // 声明成员变量,其变量的值为该类的伴生对象中的成员函数newUniqueNumber的返回值
  val id = test_companionObj.newUniqueNumber()
  // 声明成员变量balance,并将值初始化为0.0
  private var balance = 0.0
  // 声明成员函数,该函数含有Double类型的参数balance,此函数作用为将balace的值增加amount,即为让balance的值编程balance与amount的和
  def deposit(amount: Double) { balance += amount } 
}
// 创建伴生对象test_companionObj
object test_companionObj { 
  // 声明成员变量lastNumber,初始值设置为0
  private var lastNumber = 0 
  // 声明私有成员函数newUniqueNumber,其作用为将lastNumber成员变量的值增加1,并返回
  private def newUniqueNumber() = { lastNumber += 1; lastNumber } 
  // 定义主函数
  def main(args: Array[String]) {
    // 输出test_companionObj类的对象(非单例对象)的成员变量id的值
  	println(new test_companionObj().id) 
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上行舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值