鍍金池/ 問(wèn)答/Java  Scala/ scala中的Object 繼承問(wèn)題

scala中的Object 繼承問(wèn)題

第一段代碼:
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)
}

問(wèn)題:
(1) scala中 為什么么object也可以使用extends 繼承自class或者trait ,如何理解

(2)第二段代碼中為什么 extens Fruit("A","B") 這里帶了兩個(gè)參數(shù)??

感謝各位答疑!

補(bǔ)充:

clipboard.png

回答
編輯回答
兔寶寶
  1. scala設(shè)計(jì)就是如此:一個(gè) object 可以擴(kuò)展類或特質(zhì),其結(jié)果是一個(gè)擴(kuò)展了指定類或特質(zhì)的對(duì)象,同時(shí)擁有在對(duì)象定義中給出的所有特性。objectclass 的區(qū)別是:你可以理解為 object 是單例模式,它只能有一個(gè);而 class 可以創(chuàng)建多個(gè)。
  2. abstract Fruit 是什么東西……而且大括號(hào)括起來(lái)的是代碼塊,Fruit里面兩個(gè)值都是 val,你必須改成小括號(hào)使用主構(gòu)造器方法。如下可通過(guò)編譯:
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") 帶了兩個(gè)參數(shù),就是在繼承時(shí)構(gòu)造,畢竟里面兩個(gè)值你都用了 valobject Fruit 就是 abstract class Fruit 的伴生對(duì)象了。

2017年10月10日 13:26
編輯回答
晚風(fēng)眠
  1. scala里面的object并不是單純的對(duì)象的概念,也可以看成是類.類似于java里面的工具類.可以繼承其他類.
  2. 繼承Fruit類,每當(dāng)你用Apple實(shí)例化對(duì)象時(shí),都要設(shè)置name和color. 那么在繼承的時(shí)候初始化,就可以在多次實(shí)例化Apple時(shí)避免了每次都初始化屬性的問(wèn)題.
2018年7月31日 10:23