के साथ बनाम मैं उलझन में हूं। मैंने अपने मौजूदा प्रोजेक्ट में पाया। कुछ स्थानों extends
और कुछ स्थानों with
। मैं अलग-अलग खोजने में सक्षम नहीं हूं, कृपया मेरी मदद करें।स्कैला - बनाम
उत्तर
स्कैला में, आप class
ईएस (कंक्रीट या abstract
) और trait
एस से प्राप्त कर सकते हैं। इसी तरह से आप केवल एक वर्ग का विस्तार कैसे कर सकते हैं, लेकिन जावा में जितना चाहें उतने इंटरफेस को लागू कर सकते हैं, आपको केवल class
से उत्तराधिकारी होने की अनुमति है, लेकिन जितनी चाहें उतनी trait
एस।
यदि आप class
का विस्तार कर रहे हैं, तो उस वर्ग को तुरंत extends
कीवर्ड का पालन करना चाहिए। कोई भी trait
एस आप का पालन करना चाहिए, with
कीवर्ड से अलग होना चाहिए।
यदि आप कक्षा का विस्तार नहीं कर रहे हैं, तो आप extends
कीवर्ड के ठीक बाद अपना पहला trait
डाल सकते हैं और उसके बाद जारी रख सकते हैं।
जैसे ही जावा में, प्रत्येक वर्ग Object
का उप-वर्ग है, चाहे आप इसे स्पष्ट रूप से घोषित करते हैं या नहीं, स्कैला extends AnyRef with ScalaObject
में प्रत्येक (उपयोगकर्ता परिभाषित) कक्षा, चाहे आप स्पष्ट रूप से शामिल हों या नहीं।
घोषणाओं के निम्नलिखित सेट इसलिए बराबर हैं:
class MyClass { ... }
class MyClass extends AnyRef with ScalaObject { ... }
class MyClass extends MySuperClass { ... }
class MyClass extends MySuperClass with ScalaObject { ... }
class MyClass extends MyTrait1 with MyTrait2 { ... }
class MyClass extends AnyRef with MyTrait1 with MyTrait2 { ... }
class MyClass extends MySuperClass with MyTrait1 with MyTrait2 { ... }
पिछले उदाहरण ही नहीं है अगर आप MySuperClass
, MyTrait1
, और MyTrait2
का क्रम बदलने के। विशेष रूप से, आप किसी वर्ग के सामने एक विशेषता नहीं लगा सकते हैं और जिस क्रम में आप स्टैक स्टैक करते हैं, वह महत्वपूर्ण है यदि दोनों के पास एक ही तरीके के लिए कार्यान्वयन हो। (उस स्थिति में, अंतिम "जीतता है।)
याद रखें कि स्कैला में केवल class
es पैरामीटर हो सकते हैं, इसलिए आप कभी भी extends
कीवर्ड के बाद पैरामीटर को अटैचमेंट करने में सक्षम होंगे, कभी नहीं with
के बाद सूचीबद्ध किसी भी प्रकार का।
आशा है कि मदद करता है!
आप एक से अधिक class
तों या trait
रों वारिस है, तो पहले एक हमेशा extends
है, और निम्नलिखित> = 0 class
/trait
with
रों किया जाना है।
लेकिन याद रखें कि आप केवल इनहेरिट < = 1 (सार) वर्ग है, जो यदि आप एक माता पिता के वर्ग (Parent
) के वारिस की जरूरत का मतलब है, यह हमेशा प्रपत्र ... extends Parent ...
, और कोई और अधिक कक्षाओं के पहले पर आता है चाहिए कर सकते हैं व्युत्पन्न वर्ग में विरासत में प्राप्त किया जा सकता है।
trait T1
trait T2
class P1
class P2
class C1 extends T1
class C2 extends T1 with T2
class C3 extends T2 with T1
class C4 extends P1 with T1
/// class C5 extends T1 with P1 // invalid
/// class C6 extends P1 with P2 // invalid
with
वर्ग/ऐसी विशेषता है जो है extend
एड, उदाहरण के लिए, class C7 extends P1 with T1 with T2
पढ़ता class C7 extends (P1 with T1 with T2)
करने के लिए बाध्य है, वास्तव में है।
ध्यान दें कि यह वाक्य रचना के दृष्टिकोण से ही है, अर्थ मतभेद निम्नलिखित से भेजा जा सकता है:
trait
और (abstract
)class
के उपयोग here है ;- संकल्प नियम तथाकथित class linearization है; a post about it है।
extends
कीवर्ड का उपयोग करके आप जो पहली चीज प्राप्त करते हैं वह एक विशेषता या कक्षा हो सकती है।
trait SomeTrait
class SomeClass
class ThisIsValid extends SomeTrait
class ThisAsWell extends SomeClass
आप आगे विरासत में मिला परिभाषित कर सकते हैं लक्षण (और केवल लक्षण) with
कीवर्ड का उपयोग।
class AlsoThisWorks extends SomeClass with SomeTrait
यदि किसी वर्ग से प्राप्त एक विशेषता आप उपर्युक्त उदाहरण की तरह इसका उपयोग नहीं कर सकते हैं।
यह extends
और with
कीवर्ड के बारे में है। यदि आप classes और traits के बारे में अधिक जानना चाहते हैं तो आधिकारिक दस्तावेज विषय पर गहराई से चला जाता है।
- 1. स्कैला: फोल्ड बनाम foldLeft
- 2. स्कैला - नया बनाम ऑब्जेक्ट
- 3. स्कैला बनाम जावा 8
- 4. स्कैला अभिनेता: बनाम प्रतिक्रिया
- 5. एरलांग कंसुरेंसी मॉडल बनाम स्कैला बनाम गो
- 6. स्कैला फ़ंक्शन बनाम क्लास डिचोटोमी
- 7. स्कैला में मिक्सिन बनाम संरचना
- 8. स्कैला XML.loadString बनाम शाब्दिक अभिव्यक्ति
- 9. स्कैला - इंफिक्स बनाम डॉट नोटेशन
- 10. स्कैला पैकेज ऑब्जेक्ट बनाम प्रिडफ
- 11. स्कैला अपरिवर्तनीय बनाम परिवर्तनीय बनाम। किसी को क्या जाना चाहिए?
- 12. स्कैला अभिनेता बनाम धागे और अवरुद्ध आईओ
- 13. प्ले 2.0 + जावा बनाम प्ले 2.0 + स्कैला?
- 14. स्कैला जेसन लापता संपत्ति बनाम शून्य
- 15. स्कैला स्ट्रिंग बनाम java.lang.String - टाइप अनुमान
- 16. स्कैला एक्सएमएल प्रदर्शन बनाम जावा एक्सएमएल
- 17. जावा में स्कैला बनाम क्लोजर में बंद
- 18. एरलांग बनाम जेवीएम (स्कैला) रिकर्सन प्रदर्शन
- 19. स्कैला के मुहरबंद अमूर्त बनाम अमूर्त वर्ग
- 20. स्कैला: फंक्शन 0 बनाम नाम पैरामीटर
- 21. स्कैला अंतर्निहित वस्तु बनाम अंतर्निहित मूल्य
- 22. स्कैला बिल्ड टूल्स एसबीटी बनाम सीबीटी
- 23. स्कैला स्ट्रीम बनाम जावा स्ट्रीम आलस्य अंतर
- 24. स्कैला: स्लाइडिंग (एन, एन) बनाम समूहित (एन)
- 25. स्कैला प्रदर्शन: अनिवार्य बनाम कार्यात्मक शैली
- 26. पायथन बनाम स्कैला (स्पार्क नौकरियों के लिए)
- 27. स्कैला
- 28. स्कैला
- 29. स्कैला: उत्परिवर्तनीय बनाम अपरिवर्तनीय ऑब्जेक्ट प्रदर्शन - आउटऑफमेमरी एरर
- 30. जावा बनाम स्कैला - एक अलग थ्रेड पर फ़ाइल में पढ़ना
विस्तार या ऑब्जेक्ट के लिए है जबकि इंटरफ़ेस या विशेषता – HuntsMan
मार्टिन ओडर्स्की ने इस http://www.scala-lang.org/old/node/10145.html के लिए एक अच्छा जवाब लिखा है – raam86