本文主要介绍类的继承,特质与模式匹配
抽象类
- 一个类包含没有被实现的成员,使用 abstract 关键字
abstract class Car(val name:String){
// 抽象字段没有给出初始值,必须给出类型
val car:String
def info()
def greeting(){
println("This is a car")
}
}
扩展类
- 使用 extends 关键字,重载父类的抽象方法不必要加 override,重载父类已经实现的方法必须加 override。可以重载 val 类型字段,不可以重载 var 类型字段,因为 var 类型本身可变。
class BMWCar extends Car{
// 重载 var 字段
override val car = "BMW"
// 重载父类抽象方法
def info(){println("override car class info")}
// 重载父类已经实现的方法
override def greeting(){println("This is a BMW car")}
}
特质 trait
- 特质定义抽象成员的时候不用 abstract 关键字
- 类可以混入( mixin )一个或多个特质
trait Flyable{
var maxFlyHeight:Int
def fly()
def breathe(){
println("I can breathe")
}
}
trait HasLegs{
...
}
class Bird(flyHeight:Int) extends Flyable{
var maxFlyHeight:Int = flyHeight
def fly(){
...
}
}
// 使用with关键字 混入多个特质
class animal(flyHeight:Int) with Flyable with HasLegs{
...
}
模式匹配
- match 语句
- case 类
import scala.io.StdIn._
println("Please input the score:")
val grade = readChar()
grade match{
// case 也可以按类型匹配
// 比如 case i:Int
case 'A' => println("85-100")
case 'B' => println("70-84")
case 'C' => println("60-69")
case _ => println("error input")
}
// scala会自动为case类生成伴生对象 有apply方法和unapply方法
case class Car(brand: String, price: Int)
// 自动调用伴生对象的 apply 方法
val myBYDCar = Car("BYD", 89000)
包
package p1{
class c1{
...
}
}
参考资料:《厦门大学-Spark编程基础(MOOC)》