继承的作用:代码复用,提高扩展性和维护性
当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类中定义公共的属性和方法,子类继承父类即可
子类继承了所有属性,私有属性不可以直接访问,需要通过公共的方法访问
object ExtendsDemo {
def main(args: Array[String]): Unit = {
val dog = new Dog
dog.printMsg()
dog.roar()
// dog.eat // 该方法无法访问,因为是 protected 修饰的,只能在子类中访问,同包中不能访问
}
}
// 父类(基类)
class Animal {
var name: String = _
protected var age: Int = _
// color 属性在子类中无法访问
private var color: String = _
protected def eat(): Unit = {
println("eating~~~")
}
def roar(): Unit = {
println("roaring~~~")
}
}
// 子类
class Dog extends Animal {
def printMsg(): Unit = {
this.name = "dog"
this.age = 22
eat()
println(s"name=$name, age=$age")
}
override def roar(): Unit = println("汪汪汪~~~")
}
默认:什么地方都可以访问
protected:只有子类可以访问
private:只有本类或伴生对象可以访问
重写方法
重写一个非抽象非私有的方法需要使用 override 关键字,调用超类的方法使用super关键字
class A {
protected def fun1() { println("haha") }
}
class B {
override def fun1() { println("xixi") }
}