ट्रेट्स (Traits)
ट्रेट्स जावा में इंटरफेस के समान होते हैं और trait कीवर्ड का उपयोग करके बनाए जाते हैं।
एब्स्ट्रैक्ट क्लास (Abstract Class)
एब्स्ट्रैक्ट क्लास जावा में एब्स्ट्रैक्ट क्लासेस के समान होती है और abstract कीवर्ड का उपयोग करके बनाई जाती है।
उदाहरण
स्काला में ट्रेट्स और एब्स्ट्रैक्ट क्लासेस के उपयोग को दिखाने वाला निम्न प्रोग्राम है।
trait SampleTrait {
// Abstract method
def test
// Non-Abstract method
def tutorials() {
println("Traits tutorials")
}
}
abstract class SampleAbstractClass {
// Abstract method
def test
// Non-abstract method
def tutorials() {
println("Abstract Class tutorial")
}
}
class Tester extends SampleAbstractClass {
def test() {
println("Welcome to Tutorialspoint")
}
}
class TraitTester extends SampleTrait {
def test() {
println("Welcome to Tutorialspoint")
}
}
object HelloWorld {
// Main method
def main(args: Array[String]) {
var obj = new Tester()
obj.tutorials()
obj.test()
var obj1 = new TraitTester()
obj1.tutorials()
obj1.test()
}
}
आउटपुट
Abstract Class tutorial Welcome to Tutorialspoint Traits tutorials Welcome to Tutorialspoint
स्काला में ट्रेट्स और एब्स्ट्रैक्ट क्लासेस के बीच कुछ महत्वपूर्ण अंतर निम्नलिखित हैं।
| क्र. सं. | मुख्य बिंदु | ट्रेट (Trait) | एब्स्ट्रैक्ट क्लास |
|---|---|---|---|
| 1 | मल्टीपल इनहेरिटेंस | ट्रेट मल्टीपल इनहेरिटेंस का समर्थन करता है। | एब्स्ट्रैक्ट क्लास केवल सिंगल इनहेरिटेंस का समर्थन करती है। |
| 2 | इंस्टेंस | ट्रेट को ऑब्जेक्ट इंस्टेंस में जोड़ा जा सकता है। | एब्स्ट्रैक्ट क्लास को ऑब्जेक्ट इंस्टेंस में नहीं जोड़ा जा सकता। |
| 3 | कंस्ट्रक्टर पैरामीटर्स | ट्रेट के कंस्ट्रक्टर में पैरामीटर्स नहीं हो सकते। | एब्स्ट्रैक्ट क्लास में पैरामीटराइज्ड कंस्ट्रक्टर हो सकता है। |
| 4 | इंटरऑपरेबिलिटी | ट्रेट्स जावा के साथ इंटरऑपरेबल हैं यदि उनका कोई कार्यान्वयन नहीं है। | एब्स्ट्रैक्ट क्लासेस बिना किसी प्रतिबंध के जावा के साथ इंटरऑपरेबल हैं। |
| 5 | स्टैकेबिलिटी | ट्रेट्स स्टैकेबल हैं और डायनामिकली बाउंड होते हैं। | एब्स्ट्रैक्ट क्लासेस स्टैकेबल नहीं हैं और स्टैटिकली बाउंड होती हैं। |