Scala override用super调用时,发现输出空值

class Person5 {
  val  name : String = "Person5" 
     def getName = name
 // def getName = "nihao"
  def  age : Int = 30 
}
class Student5 extends  Person5 {
 override val name: String = "zhangsan"+ super.getName   //执行后发现这里的super.getName ,并不是 person5,而是null,
  //override def age: Int =12 + super.age
  override val age :Int = 13

  //var a = super.name    //这里如果直接调用 父类的属性会报错 ,所以写了一个getName方法
  var a = super.getName   //这里也没有调用打印出person,而是打印出了 zhangsannull
  var b = super.age
}
object TestStudent05 {

  def main(args: Array[String]): Unit = {
    val student05 = new Student5

    println(student05.name)
    println(student05.age)

    println(student05.a)
    println(student05.b)

  }
}

输出结果
在这里插入图片描述

开始以为 name 是用 val 定义的常量,不可变的,所以才报错,
然后把val改成var 发现执行又报错。
override变量类型不能是可变的
后来发现是因为 super.getName 调用的时候还没被初始化

具体是怎么个调用顺序还不太理解,以后有时间在研究

参考文章
http://www.dataguru.cn/forum.php?mod=viewthread&tid=284847

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值