类继承:

class People {

}

class Emp extends People{

}

和Java一样,final的类不能被继承。final的字段和方法不能被override。

在Scala中重写一个非抽象方法必须使用override, 继承抽象方法前面加了override也没关系。

abstract class Person {
def say(s: String): Unit
} class Worker extends Person{
override def say(s: String) = {
println(s + "abc")
} }

调用超类的方法,关键字用super

class WorkerSub extends Worker{
def say2(): Unit = {
super.say("call father's say")
}
}

isInstanceOf 判断对象类型,但不能区分父类型。

asInstanceOf 转换为子类的类型

用getClass和classOf精确判断类型

object TestCase {
def main(args: Array[String]): Unit = { val w = new WorkerSub()
println(w.isInstanceOf[Worker])
println(w.isInstanceOf[Person])
println(w.isInstanceOf[WorkerSub]) w.asInstanceOf[Worker].say("hello") println(classOf[Worker])
println(w.getClass == classOf[Worker])
println(w.getClass == classOf[Person])
println(w.getClass == classOf[WorkerSub]) } }

运行结果:

true
true
true
helloabc
class Worker
false
false
true

重写字段:

  1. def只能重写另一个def
  2. val只能重写另一个val或不带参数的def
  3. var只能重写另一个抽象的var,否则重写报错。

快学Scala 第十一课 (类继承)的更多相关文章

  1. 快学Scala 第二十一课 (初始化trait的抽象字段)

    初始化trait的抽象字段: trait Logged { println("Logged constructor") def log(msg: String){ println( ...

  2. 快学Scala 第八课 (嵌套类)

    嵌套类: class Human { class Student{ val age = 10 } } object ClassDemo { def main(args: Array[String]): ...

  3. 快学Scala 第七课 (类构造函数)

    类 主构造器: class Person (var name: String){ } 主构造参数可以不带val或者var,如果没有被其他方法使用,则不保存为字段. 如果被其他方法使用,则被升格为字段, ...

  4. 快学Scala 第六课 (类getter和setter)

    类getter和setter 如果字段定义是private[this], 字段是私有的,但不生成getter和setter方法. class Counter { private[this] var v ...

  5. 快学Scala 第十课 (包和包对象)

    Scala包定义: 嵌套式: package a1 { class a1Class{ val age = 10 } package a2 { class PackageTest { def main( ...

  6. 快学Scala 第十三课 (类型层级,对象相等性)

    Scala 类型层级: 对象相等性: 和Java一样要重写equals方法和hashcode方法 class Student(val id: Int, val name: String) { over ...

  7. 快学Scala 第五课 (构造映射,获取映射值,更新映射值,迭代映射,与Java互操作)

    构造映射: val score = Map[String, Int]() val score1 = HashMap[String, Int]() val value1 = Map[String, In ...

  8. 快学Scala 第四课 (多维数组,与Java集合的互操作)

    Scala二维数组的定义: val arr2 = Array.ofDim[String](2, 2) arr2(0)(0) = "aa" arr2(1)(0) = "bb ...

  9. 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)

    定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...

随机推荐

  1. HDU 1045 Fire Net 二分图建图

    HDU 1045 题意: 在一个n*n地图中,有许多可以挡住子弹的墙,问最多可以放几个炮台,使得炮台不会相互损害.炮台会向四面发射子弹. 思路: 把行列分开做,先处理行,把同一行中相互联通的点缩成一个 ...

  2. Codeforces Round #486 (Div. 3)988E. Divisibility by 25技巧暴力||更暴力的分类

    传送门 题意:给定一个数,可以对其做交换相邻两个数字的操作.问最少要操作几步,使得可以被25整除. 思路:问题可以转化为,要做几次交换,使得末尾两个数为00或25,50,75: 自己一开始就是先for ...

  3. CodeForces 367 C Sereja and the Arrangement of Numbers 欧拉回路

    Sereja and the Arrangement of Numbers 题解: ummm. 在一副图中,如果全部点的度数是偶数/只有2个点是奇数,则能一笔画. 考虑图的点数k为奇数的时候,那么每个 ...

  4. Marvelous Mazes UVA - 445

    #include<iostream> #include<stdio.h> #include<string> #include<cstring> #def ...

  5. 【Offer】[59-1] 【滑动窗口的最大值】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值.例如,如果输入数组{2,3,4,2,6,2, 5,1}及滑动窗口的大小3,那 ...

  6. windows系统下安装JDK8

    学习JAVA,必须得安装一下JDK(java development kit java开发工具包),配置一下环境就可以学习JAVA了,下面是下载和安装JDK的教程: 一.下载 1.JDK下载地址: h ...

  7. Linux下编译提示arm-none-linux-gnueabi-gcc: command not found

    自己的Linux系统中已经正确安装了交叉编译器arm-2009q3,路径设置正常. 但是在使用arm-none-linux-gnueabi-gcc编译时提示  arm-none-linux-gnuea ...

  8. 虚拟化(一) -VMware产品介绍

    https://www.cnblogs.com/zhrngM/p/9547928.html 由于公司最近在做虚拟化监控,因此就需要把虚拟化方面的知识给学习总结一下,对于虚拟化的概念,摘自百度百科,如下 ...

  9. charles 映射到本地文件/文件夹

    本文参考:charles 映射到本地文件/文件夹 本地映射/Map Local Settings 功能:把需要请求网络的文件映射为请求本地文件 本地映射工具 本地映射工具使您能够使用本地文件,就好比他 ...

  10. Uva 232 一个换行WA 了四次

    由于UVA OJ上没有Wrong anwser,搞的多花了好长时间去测试程序,之前一直以为改OJ有WA,后来网上一搜才知道没有WA,哎哎浪费了好长时间.此博客用来记录自己的粗心大意. 链接地址:htt ...