* 继承使用`extends`关键字;
* 如果子类要重写父类的成员(字段、方法)都必须使用`override`关键字修饰
* 无论是哪种类,子类都不能重写父类中的`var`字段;
```scala
class Parent1(var name:String){
val age:Int=0
}
class Parent2(val name:String){
val age:Int=0
}
// 运行报错
class Child1(override val name:String) extends Parent1(name)
// 运行成功
class Child2(override val name:String) extends Parent2(name)
```
* 如果不想某个类或成员被继承,可以使用`final`修饰类或成员;
* 子类只能有一个直接父类,即只支持单继承,多重继承;不支持多继承;
```scala
package org.example.oop
class Person {
def printName():Unit = println(this.getClass.getName)
}
class Employee extends Person {
// 重写父类的方法override关键字是必须写的
override def printName() = super.printName()
}
object App {
def main(args: Array[String]): Unit = {
val person = new Person
person.printName() // org.example.oop.Person
val employee = new Employee
employee.printName() // org.example.oop.Employee
// 判断变量是否属于某一种类型
var r1 = person.isInstanceOf[Person] // true
var r2 = person.isInstanceOf[Employee] // false
var r3 = employee.isInstanceOf[Person] // true
// 向上转型
var r4 = employee.asInstanceOf[Person] // org.example.oop.Employee@357246de
// var r5 = person.asInstanceOf[Employee] 向下转型,运行报错
}
}
```
- Scala是什么?
- Scala特性
- 开发环境搭建
- 环境搭建
- windows下的环境搭建
- IntelliJ IDEA环境搭建
- Scala关键字
- Hello, World
- 数据类型
- 数据类型
- 数据类型层次结构
- 字面量
- Null类型
- Nothing类型
- Unit类型
- 变量与常量
- type定义类型别名
- 字符串插值器
- 条件控制
- 循环控制
- 数组
- 元组
- 集合
- 集合分类
- List常用操作
- Set常用操作
- Map常用操作
- 函数
- 函数声明与调用
- 函数与方法的区别
- 函数注意事项
- 匿名函数
- 可变参数
- 高阶函数
- 中置表达式
- 函数嵌套
- 函数科里化
- 隐式参数
- 隐式函数
- 闭包
- 类和对象
- Java与Scala的比较
- 有关类与对象概念
- 类
- 类的定义和调用
- 类的继承
- 抽象类
- 单例对象
- 伴生对象和伴生类
- 特质
- 定义特质
- 混入特质
- 抽象类与特质的选择
- 自身类型
- 依赖注入
- this别名
- 样例类
- 枚举类
- 泛型类
- 包与包对象
- 模式匹配
- 基本语法
- 匹配模式
- 偏函数
- 注解
- 运算符
- 正则表达式
- 隐式类
- 异常处理
- 高级类型
- 结构类型
- 复合类型