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
- Scala类继承与单例对象
- 【Scala】单例对象与伴生对象
- Scala单例与伴生对象
- Scala 单例对象
- Scala单例对象
- Scala单例对象
- scala 类与继承
- Scala的伴生类、伴生对象与单例对象和apply的介绍
- Scala 基础学习-Scala 单例对象
- Scala的单例对象
- Scala的单例对象
- Scala : 单例对象、伴生类、伴生对象
- 0010.Scala单例对象、伴生对象
- scala 单例对象 伴生对象
- Scala类与对象
- scala-类与对象
- Scala入门学习之【类,对象,继承】
- 快学Scala-类、对象、继承、特质
- vs自动注释add-in插件编写(一)--辅助函数
- 如何本地调试微信接口
- extern "C"的用法解析
- 判断文件夹是否存在,不存在创建文件夹
- LRM-00109: could not open parameter file
- Scala类继承与单例对象
- 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut
- OTA升级提示E:signature verification failed签名失败
- DPL,RPL,CPL 之间的联系和区别
- 让CentOS6 yum源支持更多rpm包的升级(使用第三方软件库EPEL、RPMForge与RPMFusion)
- SBT解决约瑟夫环问题(poj3517)
- quick 实现的工具类Tool 2 倒计时进度条TimeProgress
- 走进swfit(四)could not insert new outlet
- C++编程命名规范