文档章节

scala基础篇-类和对象

R
 RogerIs谭纶
发布于 2015/02/26 10:38
字数 685
阅读 51
收藏 0
点赞 0
评论 0

####1. 类 #####1.1 类定义

class Counter {
  private var value = 0 //初始化字段
  def increment() { value += 1 } //默认方法是public
  def current = value //没有参数的方法可以简写省去小括号
  //对于改变对象状态的方法,如increment一般有(), 而类似取值器的方法则不需要,如current。
}

scala> val c = new Counter //或new Counter()
scala> c.current
scala> c.increment()

#####1.2 getter/setter方法 Scala默认对每个字段都提供了getter和setter方法,公有字段提供公有的getter和setter方法,私有字段提供私有的getter和setter方法。

class Person {
  var age = 0
}

scala> val p = new Person
scala> p.age = 10
scala> p.age
res0: Int = 10

在Scala中,getter和setter方法并非命名为getXxx和setXxx,而是类似如下的两个方法:

class Person {
  var theAge = 0
  def age = theAge + 1
  def age_=(newAge: Int): Unit = {
    println("override age setter method.")
    theAge = newAge
  }
}

scala> val c = new Person
scala> c.age
res2: Int = 1
scala> c.age = 29
override age setter method.
c.age: Int = 30

从上面的例子可能不太好辨识到底对哪个属性的getter和setter方法,这里只是让我们明白,调用c.age实际调用的是age这个getter方法,调用c.age=29实际调用的是*age_=*这个setter方法。 注:val的字段默认只有getter方法。 #####1.3 构造函数 构造函数不是什么特殊的方法,他们是除了类的方法定义之外的代码。

class Calculator(brand: String) {
  /**
   * A constructor.
   */
  val color: String = if (brand == "TI") {
    "blue"
  } else if (brand == "HP") {
    "black"
  } else {
    "white"
  }

  // An instance method.
  def add(m: Int, n: Int): Int = m + n
}

####2. object 对于java程序员来说,scala的object是一种特殊的语法结构,不同于java中对象的概念,接下来看它的用法。 #####2.1 static字段或方法 scala没有static字段或方法,可以使用object达到这个作用。

object Account {
  private var number = 0
  def getUniqueNumber = {
    number += 1
    number
  }
}

#####2.2 伴生对象 对于既有实例方法又有静态方法的类,在scala中通过与类同名的“伴生”对象来实现。

class Account {
  val id = Account.getNumber
  private var balance = 0.0
  def deposit(amount: Double): Unit = {
    balance += amount
  }
}

object Account {
  var number = 0
  def getNumber = {
    number += 1
    number
  }
}

#####2.3 apply语法糖 在scala中,我们经常会使用类似函数调用的语法,例如:"abc"(1)返回"b"。可以把这种用法理解为对()操作符的重载,而它的实现是通过调用当前类的伴生对象的apply方法来实现的。

class Account {
  ...
}
object Account {
  def apply(initialBalance: Double) = {
    println("apply run with parameter: " + initialBalance )
  }
}

scala>Account(1000.0)

#####2.4 应用程序入口

object Hello {
  def main(args: Array[String]): Unit = {
    println("hello world.")
  }
}

还可以使用扩展特质的办法

object Hello extends App {
  println("hello world.")
}

如何需要命令行参数,还可以这样:

object Hello extends App {
  if(args.length > 0)
    println("hello " + args(0))
  else
    println("hello world.")
}

© 著作权归作者所有

共有 人打赏支持
R
粉丝 2
博文 7
码字总数 2584
作品 0
西安
高级程序员
scala基础篇-getting started

REPL, read evaluate print loop. `object MyModule {def main(args: Array[String]): Unit = { }def abs(n: Int): Int = { }}以.scala为后缀的文件,要么定义object要么定义class。object也......

RogerIs谭纶 ⋅ 2015/02/21 ⋅ 0

Scala学习笔记 - 函数

Scala学习笔记 - 函数 OneCoder2016-09-2157 阅读 Scala Scala做为支持函数式编程的语言,函数自然是其核心的特性,因此笔者对函数部分的学习自然会更加认真细致一些。但也仅仅是基础部分。 ...

OneCoder ⋅ 2016/09/21 ⋅ 0

scala基础篇-stackoverflow

类的属性(字段)和方法是否可以同名? no.Scala为类的定义准备了两个命名空间,而Java有四个,分别是字段、方法、类型、包。Scala的两个命名空间是:值(字段,方法,包还 有单例对象)类型...

RogerIs谭纶 ⋅ 2015/02/26 ⋅ 0

Scala学习笔记-基础语法

Scala学习笔记-基础语法 OneCoder2016-09-2046 阅读 Scala 上手学习Scala语言。先熟悉一下语法。对于Scala笔者也是完全的新手,对scala的设计思想和实现原理没有太多了解。错误在所难免,还望...

OneCoder ⋅ 2016/09/20 ⋅ 0

scala基础篇-数组和映射

定长数组 变长数组 经常我们需要一个数组Array,但是初期不知道装多少元素,这种情况下,可以先构造ArrayBuffer,然后调用toArray方法。 遍历数组或数组缓冲 以上三个循环达到的效果是一样的...

RogerIs谭纶 ⋅ 2015/02/22 ⋅ 0

Spark入门到精通视频学习资料--第一章、Scala基础与实践

第一章、Scala基础与实践(3讲) Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格...

dongzhumao ⋅ 2015/02/06 ⋅ 0

Scala基础语法

Scala 是一种有趣的语言。它一方面吸收继承了多种语言中的优秀特性,一方面又没有抛弃 Java 这个强大的平台,它运行在 Java 虚拟机 (Java Virtual Machine) 之上,轻松实现和丰富的 Java 类库...

岁月留痕 ⋅ 2015/12/08 ⋅ 0

Scala学习笔记(12)-特质、包和引用

1.特质:trait是Scala里代码复用的基础单元。特质封装了方法和字段的定义,并可以通过混入到类中重用它们。不像类的继承那样,每个类都只能继承唯一的超类,类可以混入任意个特质。一旦特质被...

山海经 ⋅ 2013/08/31 ⋅ 0

Scala编程语言视频教程|Scala视频教程

Scala编程语言视频教程 分享网盘下载——https://pan.baidu.com/s/1kUFL6Ub 密码: m7k4 Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于...

nitycka ⋅ 2017/11/01 ⋅ 0

在.NET平台上使用Scala语言(上):初尝

Scala是Java平台上的一门新兴起的语言,我也不止一次在博客上提到它。我非常希望它可以取代Java这种劣质语言,让Java平台的生产力上一个台阶。事实上,Scala从一开始——或者说“很早”就对生...

mj4738 ⋅ 2011/11/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

DevOps 资讯 | PostgreSQL 的时代到来了吗 ?

PostgreSQL是对象-关系型数据库,BSD 许可证。拼读为"post-gress-Q-L"。 作者: Tony Baer 原文: Has the time finally come for PostgreSQL?(有删节) 近30年来 PostgreSQL 无疑是您从未听...

RiboseYim ⋅ 12分钟前 ⋅ 0

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 50分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 52分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 今天 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 今天 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 今天 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 今天 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 今天 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 今天 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部