scala基础(一)
类
使用class关键字后面跟上类型和构造参数来定义类。
class Greeter(prefix: String, suffix: String) { def greet(name: String): Unit = println(prefix + name + suffix) }
方法greet的返回类型为Unit,也就是说没有任何有意义的东西返回。同Java和C中的void使用方法类似。然后就可以使用关键字new来创建实例了。
val greeter = new Greeter("Hello, ", "!") greeter.greet("Scala developer") // Hello, Scala developer!
Case Classes
Scala有一种特殊类型的类叫做"case" class。默认情况下,case class是不可变的(immutable),并且是按值比较的(compared by value)。你可以通过case class关键字来定义class classes。
case class Point(x: Int, y: Int) { } object PointMain { def main(args: Array[String]): Unit = { val point = Point(1, 2) val anotherPoint = Point(1, 2) val yetAnotherPoint = Point(2, 2) if (point == anotherPoint) { println(point + " and " + anotherPoint + " are the same.") } else { println(point + " and " + anotherPoint + " are different.") } // Point(1,2) and Point(1,2) are the same. if (point == yetAnotherPoint) { println(point + " and " + yetAnotherPoint + " are the same.") } else { println(point + " and " + yetAnotherPoint + " are different.") } // Point(1,2) and Point(2,2) are different. } }
对象
对象时它们自身定义的单一实例。你可以认为它们是他们自己的类的单例。你可以使用object关键字定义对象,可以直接使用对象的名字来引用它:
object IdFactory { private var counter = 0 def create(): Int = { counter += 1 counter } def main(args: Array[String]): Unit = { val newId: Int = IdFactory.create() println(newId) val newerId: Int = IdFactory.create() println(newerId) } }
Traits
Traits是包含特定字段和方法的类型,多个Traits可以被组合。我们可以用trait关键字来定义traits。感觉类似于java中的接口。trait中的方法可以只有声明,也可以有默认实现。通过extends关键字来扩展trait,通过override关键字来覆盖traits中的实现。
trait GreeterTrait { // method in trait only defines the parameter list and return type def greetInterface(name: String): Unit // method in trait can also have default implementations def greet(name: String): Unit = { println("Hello, " + name + "!") } } abstract class DefaultGreeter extends GreeterTrait class CustormizableGreeter(prefix: String, suffix: String) extends GreeterTrait { override def greetInterface(name: String): Unit = { println(prefix + name + suffix) } override def greet(name: String): Unit = { println("in greet " + prefix + name + suffix) } } object GreeterTraitMain { def main(args: Array[String]): Unit = { val custormizableGreeter = new CustormizableGreeter("How are you, ", "?") custormizableGreeter.greet("yuxuecheng") } }
Main Method
main方法是一个程序的入口。Java虚拟机需要一个名为main的主方法,有一个参数——一个字符串数组。用一个对象,我们可以像下面这样定义main方法:
object Main { def main(args: Array[String]): Unit = println("Hello, Scala developer!") }