Java-তে abstraction অর্জন করা হয় Abstract class এবং Interface ব্যবহার করে। দুটোই অ্যাবস্ট্রাক্ট মেথড ধারণ করে যা চাইল্ড ক্লাস বা ইমপ্লিমেন্টিং ক্লাসে ইমপ্লিমেন্ট করতে হয়। Abstract class এবং Interface-এর মধ্যে গুরুত্বপূর্ণ পার্থক্য নিচে দেওয়া হলো:
| ক্র. নং | কী | Abstract Class | Interface |
|---|---|---|---|
| ১ | সাপোর্টেড মেথড (Supported Methods) | Abstract class-এ অ্যাবস্ট্রাক্ট এবং কনক্রিট দুটি মেথডই থাকতে পারে। | Interface-এ শুধু অ্যাবস্ট্রাক্ট মেথড থাকে। Java 8 থেকে ডিফল্ট ও স্ট্যাটিক মেথডও থাকতে পারে। |
| ২ | মাল্টিপল ইনহেরিটেন্স (Multiple Inheritance) | মাল্টিপল ইনহেরিটেন্স সাপোর্ট করা নেই। | Interface মাল্টিপল ইনহেরিটেন্স সাপোর্ট করে। |
| ৩ | সাপোর্টেড ভেরিয়েবল (Supported Variables) | final, non-final, static এবং non-static সব ধরনের ভেরিয়েবল সাপোর্ট করা থাকে। | শুধু static এবং final ভেরিয়েবল অনুমোদিত। |
| ৪ | ইমপ্লিমেন্টেশন (Implementation) | Abstract class ইন্টারফেস ইমপ্লিমেন্ট করতে পারে। | Interface ইন্টারফেস ইমপ্লিমেন্ট করতে পারে না, শুধু এক্সটেন্ড (extend) করতে পারে। |
| ৫ | কীওয়ার্ড (Keyword) | Abstract class ডিক্লেয়ার করতে abstract কীওয়ার্ড ব্যবহার করতে হয়। |
Interface ডিক্লেয়ার করতে interface কীওয়ার্ড ব্যবহার করতে হয়। |
| ৬ | ইনহেরিটেন্স (Inheritance - extends) | Abstract class extends কীওয়ার্ড দিয়ে অন্য ক্লাস ইনহেরিট করতে পারে এবং ইন্টারফেস ইমপ্লিমেন্ট করতে পারে। |
Interface শুধু ইন্টারফেস ইনহেরিট করতে পারে। |
| ৭ | ইনহেরিটেন্স (Inheritance - ব্যবহার) | Abstract class extends কীওয়ার্ড দিয়ে ইনহেরিট করা যায়। |
Interface শুধু implements কীওয়ার্ড দিয়ে ইমপ্লিমেন্ট করা যায়। |
| ৮ | অ্যাক্সেস (Access) | Abstract class-এ যেকোনো টাইপের মেম্বার থাকতে পারে (private, public, protected, default)। | Interface-এ শুধু public মেম্বার থাকতে পারে। |
Abstract Class vs Interface উদাহরণ
JavaTester.java
public class JavaTester {
public static void main(String args[]) {
Animal tiger = new Tiger();
tiger.eat();
Cat lion = new Lion();
lion.eat();
}
}
interface Animal {
public void eat();
}
class Tiger implements Animal {
public void eat(){
System.out.println("Tiger eats");
}
}
abstract class Cat {
abstract public void eat();
}
class Lion extends Cat{
public void eat(){
System.out.println("Lion eats");
}
}
আউটপুট
Tiger eats Lion eats