scala中的Object 继承问题

第一段代码:
class Test{}
object Driver extends  Test{

}


第二段代码:

abstract Fruit{

val name :String 
val color :String 
}

object Fruit{
 object Apple extends Fruit("apple","red")
  val menu=List(Apple)
}

问题:
(1) scala中 为什么么object也可以使用extends 继承自class或者trait ,如何理解

(2)第二段代码中为什么 extens Fruit("A","B") 这里带了两个参数??

感谢各位答疑!

补充:

clipboard.png

阅读 8.9k
2 个回答
  1. scala设计就是如此:一个 object 可以扩展类或特质,其结果是一个扩展了指定类或特质的对象,同时拥有在对象定义中给出的所有特性。objectclass 的区别是:你可以理解为 object 是单例模式,它只能有一个;而 class 可以创建多个。
  2. abstract Fruit 是什么东西……而且大括号括起来的是代码块,Fruit里面两个值都是 val,你必须改成小括号使用主构造器方法。如下可通过编译:
abstract class Fruit(val name: String, val color: String)

object Fruit{
  object Apple extends Fruit("apple","red")
  val menu=List(Apple)
}

这里 extens Fruit("A","B") 带了两个参数,就是在继承时构造,毕竟里面两个值你都用了 valobject Fruit 就是 abstract class Fruit 的伴生对象了。

  1. scala里面的object并不是单纯的对象的概念,也可以看成是类.类似于java里面的工具类.可以继承其他类.
  2. 继承Fruit类,每当你用Apple实例化对象时,都要设置name和color. 那么在继承的时候初始化,就可以在多次实例化Apple时避免了每次都初始化属性的问题.
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题