多个类之间的关系:继承
子类名 extends 父类名 就是 子类继承父类
继承的好处就是不劳而获
以下例子就是以狂飙中启强认干爹而所写的代码
class Boss {
def power(): Unit = {
println("Boss 有权力....")
}
var car = "豪车"
}
class NoBody extends Boss{
}
def main(args: Array[String]): Unit = {
val b = new NoBody()
println(b.car)
b.power()
}
重写:子类对父类的同名方法进行重写!
此时又要用到override了
class Boss {
def test():Unit={}
def power(): Unit = {
println("Boss 有权力....")
}
var car = "豪车"
}
class NoBody extends Boss{
def run():Unit= {
}
// override def power(): Unit = super.power()
override def power(): Unit = {
println("老莫,我想吃鱼了")
}
}
def main(args: Array[String]): Unit = {
val b = new NoBody()
println(b.car)
b.power()
}
父类和子类的构造器调用顺序:
先调用父类的构造器,再调用子类的构造器
class Father() {
println("Father 构造器被调用")
}
class Son extends Father(){
println("Son 构造器被调用")
}
def main(args: Array[String]): Unit = {
new Son()
} 结果://Father 构造器被调用
//Son 构造器被调用
那么,现在写一次带参数的构造器
子类带参构造器
1.继承父类的属性。不用写 val,var 修饰符
父类构造器
直接传入参数,不用写属性的类型
class Dog(var name:String,var age:Int) {
println(s"Dog ${name},${age} 构造器被调用")
}
class RuralDog(name:String,age:Int) extends Dog(name, age){
println("RuralDog 的构造器...")
}
def main(args: Array[String]): Unit = {
new RuralDog("小狗",3)
} 结果://Dog 小狗,3 构造器被调用
//RuralDog 的构造器...
相比父类,子类有新的属性将怎么写呢?
自己的新属性,加上var,val修饰符
class Dog(var name:String,var age:Int) {
println(s"Dog ${name},${age} 构造器被调用")
} "var color:String"为新加的
class RuralDog(name:String,age:Int,var color:String) extends Dog(name, age){
println(s"RuralDog 的构造器...${color}")
} "${color}"为新加的
def main(args: Array[String]): Unit = {
new RuralDog("小狗",3,"土黄色")
} "土黄色"为新加的