Scala实践8
1.1继承类
- 使用extends关键字,在定义中给出子类需要而超类没有的字段和方法,或者重写超类的方法。
class Person {
var name = "zhangsan"
}
class Employee extends Person{
var salary = 0.0
def description = "员工姓名:" + name + " 薪水:" + salary
}
1.2重写方法
- 重写一个非抽象方法需要override修饰符,调用超类的方法,使用super关键字。
class Person {
var name = ""
override def toString = getClass.getName + "[name=" + name + "]"
}
class Employee extends Person {
var salary = 0.0
override def toString = super.toString + "[salary=" + salary + "]"
}
1.3类型检查和转换
- 用isInstanceOf方法,测试某个对象是否属于某个给定的类型。
- 用asInstanceOf方法将引用转换为子类的引用。classOf获取对象的类名。
scala> a.isInstanceOf[String]
<console>:23: warning: fruitless type test: a value of type Array[String] cannot also be a String (the underlying of String)
a.isInstanceOf[String]
^
res59: Boolean = false
scala> 4.isInstanceOf[Double]
res64: Boolean = false scala> 3.asInstanceOf[Float]
res63: Float = 3.0
1.4超类的构造
类有一个主构器和任意数量的辅助构造器,而每个辅助构造器都必须以对先前定义的辅助构造器或主构造器的调用开始。子类的辅助构造器最终都会调用主构造器,
- 只有主构造器可以调用超类的构造器。辅助构造器不可能直接调用超类的构造器。
- 在Scala的构造器中,你不能调用super(params)。
1.5 重名字段
- 子类改写父类或者抽象父类的字段
class Person1(val name:String,var age:Int){
println("主构造器已经被调用")
val school="五道口职业技术学院"
def sleep="8 hours"
override def toString="我的学校是:" + school + "我的名字和年龄是:" + name + "," + age
}
class Person2(name:String, age:Int) extends Person1(name, age){
override val school: String = "清华大学"
}
scala> val a=new Person2("a",11)
主构造器已经被调用
a: Person2 = 我的学校是:清华大学我的名字和年龄是:a,11
注:1)def只能重写另一个def
2)val只能重写另一个val或不带参数的def
3)var只能重写另一个抽象的var
1.6 抽象类
- abstract关键字标记不能被实例化的类。
- 方法不用标记abstract,只要省掉方法体即可。
- 类可以拥有抽象字段,抽象字段就是没有初始值的字段。
abstract class Person(val pname: String) {//抽象类
val id: Int
var name: String
def idString: Int//抽象方法
}
class Employee(pname: String) extends Person(pname) {
val id = 5;
var name = ">>>"
def idString = pname.hashCode
}
注:子类实现抽象方法不需要override
1.7 单例对象
对象是一个只有一个实例的类,被引用时会被懒惰地创建,就像懒惰的value一样。作为顶级值,对象是单例。
作为封闭类的成员或者本地值,它的行为和val完全相同。
- 定义单个对象
对象是一个值。对象的定义看上去像一个类,但使用关键字object
object Box
这是一个带有方法的对象的示例:
object Logger { def info(message: String): Unit = println(s"INFO: $message") }
该方法info可以从程序中的任何位置导入。像这样创建实用程序方法是单例对象的常见用例。
如何info在另一个包中使用,如下:
import lab13.Logger.info class Project(name: String, daysToComplete: Int)
class Test {
val project1 = new Project("TPS Reports", 1)
val project2 = new Project("Website redesign", 5)
info("Created projects")
}
info由于import语句,该方法是可见的import lab13.Logger.info,然后导入需要导入符号的“稳定路径”,对象是稳定路径。
Scala实践8的更多相关文章
- Scala实践14
1.Scala的future 创建future import scala.concurrent._ import ExecutionContext.Implicits.global object Fu ...
- Scala实践13
1.隐式参数 方法可以具有隐式参数列表,由参数列表开头的implicit关键字标记.如果该参数列表中的参数没有像往常一样传递,Scala将查看它是否可以获得正确类型的隐式值,如果可以,则自动传递. S ...
- Scala实践12
1.内部类和抽象类型成员作为对象成员 内部类 在Scala中,可以让类将其他类作为成员.这些内部类是封闭类的成员.在Scala中,这样的内部类绑定到外部对象.假设希望编译器在编译时阻止我们混合哪些节点 ...
- Scala实践11
1.1泛型类 泛型类是将类型作为参数的类.它们对集合类特别有用. 定义泛类型:泛型类将类型作为方括号内的参数[].一种惯例是使用字母A作为类型参数标识符,但是可以使用任何参数名称. class Sta ...
- Scala实践10
1.模式匹配 模式匹配是一种根据模式检查值的机制.它是switch(Java中语句)的更强大版本,它同样可以用来代替一系列if / else语句. 句法 匹配表达式具有值,match关键字和至少一个c ...
- Scala实践9
1.特征 Traits用于在类之间共享接口和字段.它们类似于Java 8的接口.类和对象可以扩展特征,但是特征不能被实例化,因此没有参数. 定义一个特征 最小特征只是关键字trait和标识符: tra ...
- Scala实践6
1 if表达式 Scala中if...else..表达式是有返回值的,如果if和else返回值类型不一样,则返回Any类型. scala> val a3=10 a3: Int = 10 sca ...
- Scala实践7
一.类 1.1简单类和无参方法 类的定义通过class关键字实现 scala> class Dog { | private var leg = 4 | def shout(content: St ...
- Scala实践5
一.Scala的层级 1.1类层级 Scala中,Any是所其他类的超类,在底端定义了一些有趣的类NULL和Nothing,是所有其他类的子类. 根类Any有两个子类:AnyVal和AnyRef.其中 ...
随机推荐
- 2018-8-10-使用-RetroShare-分享资源
title author date CreateTime categories 使用 RetroShare 分享资源 lindexi 2018-08-10 19:16:51 +0800 2018-02 ...
- echarts实现多条可拖动节点的折现图
这篇博文主要是利用echarts实现两条以及多条可拖动节点的曲线,demo脱胎于官方demo,在官方demo的基础上添加了另一条曲线.因为之前写过一篇在vue中使用echarts实现可拖动节点的折线图 ...
- Java开发之快捷键
1.显示桌面快捷键:win+D或者右击状态栏,选择显示桌面. 2.UE编辑器:如果想把多行记录合并为一行,使用替换(Ctrl+R),查找里输入^p(代表回车换行符),替换为里什么都不填,替换位置选择所 ...
- .gitkeep常用写法
# win & OSX system files .DS_Store Thumbs.db ehthumbs.db Desktop.ini # IDE files .idea # project ...
- Linux 内核 EISA 总线
扩展 ISA (EISA) 总线是一个对 ISA 的 32-位 扩展, 带有一个兼容的接口连接器; ISA 设备板可被插入一个 EISA 连接器. 增加的线在 ISA 接触之下被连接. 如同 PCI ...
- mangoDB 储存 id为objectid
- 为何D3D11的几个矩阵需要转置?
在学习D3D11的时候遇到一个问题,事情是这样的: D3D11引入了常量缓存(const buffer)用来实现数据的高速传输,这块儿buffer是CPU Only Write,GPU Only Re ...
- 2018-8-10-C#-6.0-字符串-String-Interpolation
title author date CreateTime categories C# 6.0 字符串 String Interpolation lindexi 2018-08-10 19:16:52 ...
- CodeForces 375D Tree and Queries
传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...
- slim中的请求头
请求头 每个 HTTP 请求都有请求头.这些元数据描述了 HTTP 请求,但在请求体中不可见.Slim 的 PSR 7 请求对象提供了几个检查请求头的方法. 获取所有的请求头,返回一个数组:getHe ...