`
tongqingqiu
  • 浏览: 24795 次
  • 性别: Icon_minigender_1
  • 来自: 亚特兰大
社区版块
存档分类
最新评论

Scala基础(6)- 类和对象

阅读更多

定义

类的定义例子如下。

class Point(xc: Int, yc: Int) {
  var x: Int = xc
  var y: Int = yc
  def move(dx: Int, dy: Int) {
    x = x + dx
    y = y + dy
  }
  override def toString(): String = "(" + x + ", " + y + ")";
}

move方法有两个参数,没有返回值(这里Scala缺省了Unit,类似于Java中void的返回)。toString是一个重载的方法,必须使用override

类的定义中可以有多个构造参数。这比C++或者Java的构造函数更简洁。

使用

通过类可以创建对象的实例,调用类方法。

val pt = new Point(1, 2)
println(pt)
pt.move(10, 10)
println(pt)

函数和方法在很大程度上是可以互换的。在下面的例子中,调用minc和finc的方式完全一样,效果也基本相同。其细微的差别你现在也不需要关心。

class C {
       var acc = 0
       def minc = { acc += 1 }
       val finc = { () => acc += 1 }
}

单例(singleton)对象

Scala中没有static成员。取而代之的是单例(singleton)对象。单例对象的定义和类定义相同,除了使用关键字object。我们常常使用相同的名字定义一个类和一个单例对象。这样的对象是该类的伴生对象,可以访问该类的成员和方法。通过这样的方法(和apply结合使用),我们可以实现类型的factory,从而去除了外部new的使用。

class MyString(val jString:String) {
  private var extraData = ""
  override def toString = jString+extraData
}
object MyString {
  def apply(base:String, extras:String) = {
    val s = new MyString(base)
    s.extraData = extras
    s
  }
  def apply(base:String) = new MyString(base)
}

println(MyString("hello"," world"))
println(MyString("hello"))

为了运行一个Scala程序,必须定义这样一个单例对象作为main的入口。

object HelloWorldApp {
    def main(args: Array[String]) {
      Console.println("Hello World!")
} }

Scala也提供了App让你继承,以达到相同的效果。

object HelloWorldApp extends App {
  Console.println("Hello World!")
}

Scala中继承,抽象类,重载等概念和其他面向对象的语言基本相关,除了特质(trait)。我们会把特质单独拿出来讲。

0
0
分享到:
评论

相关推荐

    scala-intellij-bin-2016.3.9

    1. **Scala编译器和运行时库**:这是开发Scala项目所必需的基础组件,包括Scala编译器(scalac)和Scala标准库。 2. **插件本身**:包含用于在IntelliJ IDEA中集成Scala开发环境的代码和配置文件。这些文件使得IDE...

    scala入门--文档版本

    #### 四、Scala基础语法 - **Class**: 类的定义与Java类似,用于封装数据和行为。 ```scala class MyClass { def helloWorld = println("Hello, Scala!") } ``` - **Object**: 用于定义单例对象,相当于Java...

    scala-intellij-bin-2020.3.14.zip

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。IntelliJ IDEA是一款流行的Java集成开发环境(IDE),同样也支持多种其他编程语言,包括Scala。"scala-intellij-bin-2020.3.14.zip" 文件是...

    Scala-2.11.1.zip

    6. **模式匹配**:Scala的模式匹配允许开发者在代码中解构复杂的对象和数据结构,使其能够优雅地处理多种情况。 7. **类型类**:类型类是一种在运行时发现和组合类型特性的设计模式,它允许在不使用传统继承的情况...

    scala-SDK-4.7.0-vfinal-2.12-macosx.cocoa.x86_64

    在使用Scala SDK时,开发者可以利用其强大的函数式编程特性,例如高阶函数、模式匹配、不可变数据结构等,同时也可以利用面向对象编程的特性,如类、对象和继承。Scala还支持类型推断,这意味着程序员不必总是显式地...

    scala-2.13.0-M5.tgz

    Scala,这门强大的编程语言,融合了面向对象和函数式编程的精粹,为开发者提供了丰富的工具和灵活性。它的设计理念是“可伸缩的语言”,意味着它既可以满足大型企业级应用的需求,也能在小型项目中展现出高效能。...

    scala-docs-2.11.1.zip

    类和对象是构建Scala程序的基础,而特质(trait)则提供了一种灵活的继承和复用机制。函数在Scala中是第一等公民,可以作为值传递,存储在变量中,甚至作为其他函数的参数或返回值。 `2.11.1`是Scala的一个重要版本...

    大数据课程-Scala编程基础-3.Scala面对对象的特性_lk_edit.ppt

    本节主要讲解Scala在面向对象编程方面的特性,包括包管理、类和对象、单例对象和伴生对象、特质、枚举类以及应用类。 首先,Scala的包管理类似于Java,用于组织和管理类,避免名称冲突并提供访问控制。包的命名遵循...

    scala-sbt-helloworld.zip

    Scala是一种强大的、面向对象的编程语言,它融合了函数式编程和面向对象编程的概念,为开发者提供了高效且灵活的编程体验。sbt(Simple Build Tool)是Scala项目的默认构建工具,它允许用户以声明性的方式定义项目...

    大数据课程-Scala编程基础-1.Scala语言初识_lk_edit.ppt

    【大数据课程-Scala编程基础-1.Scala语言初识】是针对初学者设计的一门课程,旨在教授如何入门Scala编程,特别适合已有Java基础的学员。Scala是一种在2001年由洛桑联邦理工学院(EPFL)的编程方法实验室研发的语言,...

    scala-doc-2.11.8 原版

    1. **基础语法**:Scala的基础语法与Java有很多相似之处,但也有其独特的特点,如模式匹配、高阶函数、类型推断和case类。文档会详细解释这些概念,帮助初学者快速上手。 2. **类型系统**:Scala有一个强大的静态...

    scala sdk scala-2.12.3

    2. **标准库**:Scala的标准库提供了大量的类和模块,包括集合操作、I/O、反射、并发处理等,这些是编写Scala程序的基础。 3. **Scala REPL**:Read-Eval-Print Loop,交互式解释器,允许开发者即时测试代码片段,...

    scala-2.12-Windows非安装版

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念,设计目标是提供一种静态类型系统,能够防止程序在运行时出现错误。Scala-2.12是该语言的一个版本,专为Java虚拟机(JVM)设计,并且与Java 8...

    scala-intellij-bin-2017.2.6.tar.gz

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款广受欢迎的集成开发环境(IDE),尤其在Java和Scala开发者中深受喜爱。"scala-intellij-bin-2017.2.6.tar.gz" 是一个...

    scala-intellij-bin-2018.3.6.zip

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款广受欢迎的集成开发环境(IDE),尤其在Java和Scala开发者中深受喜爱。"scala-intellij-bin-2018.3.6.zip" 是一个包含...

    scala-423-n

    通过"scala-423-n"这个主题,我们可以推测可能的学习内容包括Scala的基础语法、面向对象和函数式编程的结合使用、并发编程、集合API的深入理解和使用,以及如何使用Scala进行大数据分析和处理。文件列表中的"Scala...

    快学Scala课后习题答案

    5. **面向对象编程**:Scala支持类和对象,可以创建类继承和接口实现。同时,trait提供了一种实现多重继承的方式。 6. **函数式编程**:Scala的函数式编程特性包括柯里化、尾递归、闭包和monads等。例如,`f.curry`...

    scala-2.13.8 解压安装版

    4. **库和框架**:Scala是许多流行框架的基础,如Play Framework(用于Web开发)、Apache Spark(大数据处理)和Akka(并发和分布式计算)。这些框架使得开发高效、可扩展的应用变得容易。 5. **编译器和IDE支持**...

    Scala-hadoop-spark-新教程含金量最高的大数据教程

    特别是对于初学者来说,掌握了如何使用Scala和Java创建SparkContext和RDD对象,以及如何在Eclipse环境下进行Spark程序的开发和调试是非常重要的。此外,还介绍了如何使用Maven进行项目管理和编译,以及如何手动编译...

    快学Scala完整版&Scala编程(中文版)&Scala程序设计-多线程编程实践

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,使得它在处理并发和大数据分析方面尤为出色。这个压缩包包含了三本关于Scala学习的重要资源,分别是《快学Scala》完整版书籍、《SCALA程序...

Global site tag (gtag.js) - Google Analytics