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的更多相关文章

  1. Scala实践14

    1.Scala的future 创建future import scala.concurrent._ import ExecutionContext.Implicits.global object Fu ...

  2. Scala实践13

    1.隐式参数 方法可以具有隐式参数列表,由参数列表开头的implicit关键字标记.如果该参数列表中的参数没有像往常一样传递,Scala将查看它是否可以获得正确类型的隐式值,如果可以,则自动传递. S ...

  3. Scala实践12

    1.内部类和抽象类型成员作为对象成员 内部类 在Scala中,可以让类将其他类作为成员.这些内部类是封闭类的成员.在Scala中,这样的内部类绑定到外部对象.假设希望编译器在编译时阻止我们混合哪些节点 ...

  4. Scala实践11

    1.1泛型类 泛型类是将类型作为参数的类.它们对集合类特别有用. 定义泛类型:泛型类将类型作为方括号内的参数[].一种惯例是使用字母A作为类型参数标识符,但是可以使用任何参数名称. class Sta ...

  5. Scala实践10

    1.模式匹配 模式匹配是一种根据模式检查值的机制.它是switch(Java中语句)的更强大版本,它同样可以用来代替一系列if / else语句. 句法 匹配表达式具有值,match关键字和至少一个c ...

  6. Scala实践9

    1.特征 Traits用于在类之间共享接口和字段.它们类似于Java 8的接口.类和对象可以扩展特征,但是特征不能被实例化,因此没有参数. 定义一个特征 最小特征只是关键字trait和标识符: tra ...

  7. Scala实践6

    1  if表达式 Scala中if...else..表达式是有返回值的,如果if和else返回值类型不一样,则返回Any类型. scala> val a3=10 a3: Int = 10 sca ...

  8. Scala实践7

    一.类 1.1简单类和无参方法 类的定义通过class关键字实现 scala> class Dog { | private var leg = 4 | def shout(content: St ...

  9. Scala实践5

    一.Scala的层级 1.1类层级 Scala中,Any是所其他类的超类,在底端定义了一些有趣的类NULL和Nothing,是所有其他类的子类. 根类Any有两个子类:AnyVal和AnyRef.其中 ...

随机推荐

  1. Spark1.6.1 MLlib 特征抽取和变换

    Spark1.6.1 MLlib 特征抽取和变换 1 TF-IDF TF-IDF是一种特征向量化方法,这种方法多用于文本挖掘,通过算法可以反应出词在语料库中某个文档中的重要性.文档中词记为t,文档记为 ...

  2. Appium + python 自动化测试环境配置

    -------------------------------------------------------------- 1. jdk-8u121-window(32位的就下载32位的,64位的就 ...

  3. pytorch nn.LSTM()参数详解

    输入数据格式:input(seq_len, batch, input_size)h0(num_layers * num_directions, batch, hidden_size)c0(num_la ...

  4. 2018-8-10-VisualStudio-合并代码文件

    title author date CreateTime categories VisualStudio 合并代码文件 lindexi 2018-08-10 19:16:52 +0800 2018-2 ...

  5. Jmeter压力测试教程(入门篇)

    2.4 添加HTTP镜像服务器 在运行测试之前,如何验证我们发送的信息是否有误?如何可以理直气壮的告诉别人自己发送的测试请求没有问题?这里推荐添加HTTP镜像服务器进行校验测试. HTTP镜像服务器并 ...

  6. Hamcrest Tutorial

    Java Hamcrest Home Hamcrest Tutorial Introduction Hamcrest is a framework for writing matcher object ...

  7. C/C++ 获取键盘事件

    Windows 系统下的 vs 中可以使用 _kbhit() 函数来获取键盘事件,使用时需要加入 conio.h 头文件 #include <conio.h> #include <i ...

  8. TransactionDefinition接口中定义了七个事务传播行为

    1.PROPAGATION_REQUIRED如果存在一个事务,则支持当前事务,如果没有事务则开启一个新的事务.使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在 ...

  9. hdu 6852Path6(最短路+最小割)

    传送门 •题意 有n个城市,标号1-n 现花费最小的代价堵路 使得从1号城市到n号城市的路径边长 (注意只是变长不是最长) 堵一条路的代价是这条路的权值 •思路 在堵路以前,从1到n的最小路径当然是最 ...

  10. node-sass安装报错

    npm install --save-dev node-sass --registry=https://registry.npm.taobao.org --disturl=https://npm.ta ...