risc-v中文社区

 找回密码
 立即注册
查看: 992|回复: 0

[原创] risc-v开发基础 Scala 抽象类---(11)

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-4 11:16:48 | 显示全部楼层 |阅读模式
//有抽象方法或其它抽象成员的类就是抽象类,抽象类不能直接实例化,只能子类将抽象成员具体化之后才能实例化对象
object AbstractClassTest {
  def main(args: Array[String]): Unit = {
    val cat3 = new Cat3(2,"climb")
    val dog3 = new Dog3("tom",3,"wangwang")
    cat3.voice
    dog3.voice
  }
}
abstract class Animal3(val name:String) {
  var age:Int
  def voice():Unit
  def this(name:String,age:Int) = {
    this(name)
  }
}
//抽象父类中有主构造和辅助构造函数,有具体类型字段或属性(name),也有抽象类型(age)
//辅助构造函数在第一句要用this(主构造器的参数列表)形式来调用主构造函数
//主构造传参形式,如果父类中字段不是抽象的,必须要用override (补充说明:如果Animal中var age:Int = 0定义为具体类型而不是
// var age:Int抽象类型也要在Dog的主构造的var age:Int前面加上override,从语法角度来理解的话,父类已经是有一个类型值放在那儿了,
// 你子类再对这个字段重新赋一个新值是不是要明确说明是override,否则就表示不声不响覆盖了父类的这个值)
class Dog3(override val name:String,var age:Int,var hobby:String) extends Animal3(name,age) {
  override def voice(): Unit = println("Dog:" + name + " : " + age + " : " + hobby)
}
class Cat3(var age:Int,var hobby:String) extends Animal3("Jack") {
  override def voice(): Unit = println("Cat:" + name + " : " + age +" : " + hobby)
}

显示如下:
Cat:Jack : 2 : climb
Dog:tom : 3 : wangwang

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-5-3 19:12 , Processed in 0.017140 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表