好处:不劳而获。 重写:子类对父类的同名方法进行重写! 父类和子类的构造器调用顺序:先调用父类的构造器,再调用子类的构造器
object class03 {
class Father() {
println("Father 构造器被调用")
}
class Son extends Father() {
println("Son 构造器被调用")
}
def main(args: Array[String]): Unit = {
// new Father()
new Son()
}
}
object class04 {
// 父类
class Dog(var name: String, var age: Int) {
println(s"Dog ${name}, ${age} 构造器被调用")
}
// 子类 中华田园犬
// 子类带参构造器
// 1. 继承父类的属性。不用写 val, var 修饰符
// 父类构造器
// 直接传入参数,不用写属性的类型
class RuralDog(name: String, age: Int) extends Dog(name, age) {
println("RuralDog 构造器...")
}
def main(args: Array[String]): Unit = {
new RuralDog("旺财", 3)
}
}
- 父类和子类的构造器调用顺序:先调用父类的构造器,再调用子类的构造器
- 带参构造器
- 相比父类,子类有新的属性
object class05 {
// 父类
class Dog(var name: String, var age: Int) {
println(s"Dog ${name}, ${age} 构造器被调用")
}
// 子类 中华田园犬
// 子类带参构造器
// 1. 继承父类的属性。不用写 val, var 修饰符
// 2. 自己的新属性,加上var, val修饰符
// 父类构造器
// 直接传入参数,不用写属性的类型
class RuralDog(name: String, age: Int, var color: String) extends Dog(name, age) {
println(s"RuralDog 的构造器...${color}")
}
def main(args: Array[String]): Unit = {
var dog1 = new RuralDog("旺财", 3, "土黄色")
}
}