在原有类的基础上定义一个新类,原有类称为父类,新类称为子类。
class 子类名 extends 父类名 { 类体 }
package leve02
object Class010 {
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()
}
}
package leve02
object Class010 {
class Boss() {
def power(): Unit = {
println("Boss 有权利....")
}
var car = "豪车"
}
class NoBody extends Boss{
def run():Unit = {
}
override def power():Unit = {
println("老莫,我想吃鱼了")
}
}
def main(args:Array[String]):Unit = {
val b = new NoBody()
println(b.car)
b.power()
b.run()
}
}
- 重写:子类与父类的同名方法进行重写
- 子类自己的方法,与父类的方法不同名
package leve02
object Class011 {
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)
}
}
子类带构造器
- 继承父类的属性。不用谢val,var修饰符
- 自己的新属性,加上var,val修饰符
父类构造器
- 直接传入参数,不用谢属性的类型 在写子类构造器时:
-
如果某个属性可以从父类中继承过来,那么这些属性就不要添加任何的修饰符(val,var都不加)如果这属性是子类自己特有的,就需要补充修饰符;
-
在父类构造器时,直接传入对应的参数。