Traits
Traits হলো জাভার ইন্টারফেসের মতো এবং এটি trait কীওয়ার্ড ব্যবহার করে তৈরি করা হয়।
Abstract Class
Abstract Class হলো জাভার অ্যাবস্ট্র্যাক্ট ক্লাসের মতো এবং এটি abstract কীওয়ার্ড ব্যবহার করে তৈরি করা হয়।
উদাহরণ
নিচে স্কালাতে Traits এবং Abstract Classes-এর ব্যবহার দেখানো হলো:
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
নিচে স্কালাতে Traits এবং Abstract Classes-এর মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য দেওয়া হলো:
| ক্রমিক নং | মূল পয়েন্ট | Trait | Abstract Class |
|---|---|---|---|
| 1 | Multiple inheritance | Trait মাল্টিপল ইনহেরিটেন্স সাপোর্ট করে। | Abstract Class শুধু সিঙ্গেল ইনহেরিটেন্স সাপোর্ট করে। |
| 2 | Instance | Trait একটি অবজেক্ট ইনস্ট্যান্সে যোগ করা যায়। | Abstract class একটি অবজেক্ট ইনস্ট্যান্সে যোগ করা যায় না। |
| 3 | Constructor parameters | Trait এর কনস্ট্রাক্টরে প্যারামিটার থাকতে পারে না। | Abstract class প্যারামিটারাইজড কনস্ট্রাক্টর 가질 수 있습니다। |
| 4 | Interoperability | Traits জাভার সাথে ইন্টারঅপারেবল যদি তাদের কোনো ইমপ্লিমেন্টেশন না থাকে। | Abstract classes কোনো সীমাবদ্ধতা ছাড়াই জাভার সাথে ইন্টারঅপারেবল। |
| 5 | Stackability | Traits স্ট্যাকেবল এবং ডাইনামিক্যালি বাউন্ড। | Abstract classes স্ট্যাকেবল নয় এবং স্ট্যাটিক্যালি বাউন্ড। |