scala教程:继承

说明

与 java 继承类似:

  1. 子类继承父类的属性和方法
  2. scala 是单继承
  3. 创建子类对象时,先调用 父类构造器,然后再调用 子类构造器

语法

class 子类名 extends 父类名 {
  类体
}

说明:

  1. 子类继承父类的属性和方法
  2. 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)

  }
}

原文出处:/show_1IX1CwUrBCta.html