इसलिए। मान लें कि हमारे पास एक विशेषता Animal है

trait Animal {
  val typeAnimal: String
  val name: String
}

और अब मैं एक वर्ग Dog बनाना चाहता हूं, जो इस विशेषता का विस्तार करे। लेकिन मैं कंपेनियन ऑब्जेक्ट का उपयोग टाइपएनिमल से स्तनपायी को ओवरराइड करने के लिए करना चाहता हूं, इसके बजाय इसे क्लास डॉग पर ही करना है। कुछ इस तरह

class Dog(override val name: String) extends Animal
object Dog {
  override val typeAnimal = "Mammal"
}

यह काम नहीं करता है। यह मुझसे यह कहते हुए एक त्रुटि उत्पन्न करता है:

  1. क्लास डॉग टाइपएनिमल को लागू नहीं करता है
  2. साथी वस्तु पर टाइपएनिमल का ओवरराइड कुछ भी ओवरराइड नहीं करता है

क्या यह संभव भी है? क्या इसका कोई मतलब है कि मैं क्या हासिल करने की कोशिश कर रहा हूं?

संपादित करें मुझे लगता है कि जोर्ग की टिप्पणी के बाद मैं यहां जो कोशिश कर रहा हूं उसे हासिल करना संभव नहीं है।

मैं जो करने की कोशिश कर रहा था वह है: एक विशेषता कुछ static मान को परिभाषित करती है जिसे प्रत्येक वर्ग को लागू करना चाहिए, जैसे टाइपएनिमल, और, क्योंकि यह प्रत्येक वर्ग के सभी उदाहरणों से संबंधित है जो इस विशेषता को लागू करता है (उदाहरण के लिए कुत्ता एक स्तनपायी है, इसलिए मुझे कोई कारण नहीं दिख रहा है कि टाइपएनिमल एक स्थिर के बजाय एक आवृत्ति चर होना चाहिए) मैं साथी वस्तु में ओवरराइड करना चाहता हूं

2
Tizianoreica 3 मार्च 2019, 13:11

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप चाहते हैं कि typeAnimal "स्थिर" हो, तो यह स्वयं विशेषता का सदस्य नहीं होना चाहिए। आप इसके बजाय ऐसा कर सकते हैं:

trait Animal {
  val name: String
  def companion: AnimalCompanion
  // optional: def typeAnimal = companion.typeAnimal
}

trait AnimalCompanion {
  val typeAnimal: String
}

class Dog(override val name: String) extends Animal {
  override def companion = Dog
}
object Dog extends AnimalCompanion {
  override val typeAnimal = "Mammal"
}

मानक पुस्तकालय संग्रह के साथ ऐसा करता है .

6
Alexey Romanov 3 मार्च 2019, 14:06