Scala类继承与单例对象

来源:互联网 发布:网络营销软件有哪些 编辑:程序博客网 时间:2024/06/06 15:44

一、Scala类继承

Scala继承一个基类跟Java很相似,只多了两点限制:1、重写方法需要override关键字,2、只有主构造函数才可以往基类的构造函数里写参数。

Scala的副构造函数必须调用主构造函数或另一个构造函数,在Scala里主构造函数如同一道关卡,类的实例需要通过他来初始化。

示例:

class Vehicle (val id:Int, val year:Int){  override def toString() : String = "ID: " + id + " Year: " + year    def make(name: String) = {    println("Vehicle make name "+ name)  }}

class Car(override val id: Int, override val year: Int,    var fuelLevel: Int)extends Vehicle(id, year) {  override def toString() : String = super.toString() + " Fuel Level: " + fuelLevel      override def make(name: String) = {    println("Car make name "+ name)  }}

调用:

val car : Vehicle = new Car(1, 2009, 10)println(car)println(car.make("bmw"))

输出:

ID: 1 Year: 2009 Fuel Level: 10Car make name bmw


二、Scala单例对象

Scala是没有静态对象和属性的,但他拥有伴生对象,

我们利用伴生对象来实现Scala的单例,如:

// 私有构造方法class Marker private(val color:String) {  println("Creating " + this)    override def toString(): String = "marker color "+ color  }// 伴生对象,与类共享名字,可以访问类的私有属性和方法object Marker{      private val markers: Map[String, Marker] = Map(      "red" -> new Marker("red"),      "blue" -> new Marker("blue"),      "green" -> new Marker("green")    )        def apply(color:String) = {      if(markers.contains(color)) markers(color) else null    }          def getMarker(color:String) = {       if(markers.contains(color)) markers(color) else null    }}

使用:

// 方法糖 applyprintln(Marker("red"))// 单例函数调用,省略了.(点)符号println(Marker getMarker "blue")

输出:

Creating marker color redCreating marker color blueCreating marker color greenmarker color redmarker color blue






0 0
原创粉丝点击