说明
与 java 继承类似:
- 子类继承父类的属性和方法
- scala 是单继承
- 创建子类对象时,先调用 父类构造器,然后再调用 子类构造器
语法
class 子类名 extends 父类名 {
类体
}
说明:
- 子类继承父类的属性和方法
- scala 是单继承
例子1
用 java 的思路编写 scala 代码,定义 成员变量
class Phone {
var cpu:String = _
var ram:Int = _
println("主构造方法")
def this(cpu:String,ram:Int) {
this
this.cpu = cpu
this.ram = ram
println("辅助构造器")
}
def call(num:String):Unit = {
println("用 "+cpu+" 给 "+num+" 打电话")
}
}
class IPhone extends Phone {
var nfc:String = _
println("子类主构造方法")
def this(cpu:String,ram:Int,nfc:String) {
this
this.cpu = cpu
this.ram = ram
this.nfc = nfc
println("子类辅助构造器")
}
}
object Phone{
def main(args: Array[String]): Unit = {
val phone:IPhone = new IPhone("A100",16,"nfc刷公交") //调用辅助构造器
println(phone.cpu) //继承父类的属性
println(phone.ram) //继承父类的属性
println(phone.nfc)
phone.call("120") //继承父类的方法
}
}
执行结果:
主构造方法
子类主构造方法
子类辅助构造器
A100
16
nfc刷公交
用 A100 给 120 打电话
先调用父类构造器,然后调用子类的构造器
例子2
使用 scala 的思路,通过 主构造器 的 形参 定义 成员变量
class Phone(val cpu:String,val ram:Int) {
println("主构造方法")
// def this(cpu:String,ram:Int) {
// this(cpu,ram)
// println("辅助构造器")
// }
def this(cpu:String) {
this(cpu,8)
println("辅助构造器")
}
}
//由于父类的主构造器、辅助构造器都有参数,所以继承时,必须传参数,为了能够传参,子类也要有相应的形参
class IPhone(cpu:String,ram:Int) extends Phone(cpu) {
var nfc:String = _
println("子类主构造方法")
def this(cpu:String,ram:Int,nfc:String) {
this(cpu,ram)
this.nfc = nfc
println("子类辅助构造器")
}
}
object Phone{
def main(args: Array[String]): Unit = {
val phone:IPhone = new IPhone("A100",16,"nfc刷公交") //调用辅助构造器
println(phone.cpu)
println(phone.nfc)
}
}
执行结果:
主构造方法
辅助构造器
子类主构造方法
子类辅助构造器
A100
8
nfc刷公交
例子3
简化例子2,同时在 子类 的 主构造器 增加新的 成员变量
class Phone(val cpu:String,val ram:Int) {
println("主构造方法")
}
class IPhone(cpu:String,ram:Int,val nfc:String) extends Phone(cpu,ram) {
println("子类主构造方法")
}
object Phone{
def main(args: Array[String]): Unit = {
val phone:IPhone = new IPhone("A100",16,"nfc刷公交") //调用辅助构造器
println(phone.cpu)
println(phone.nfc)
}
}