কম্পিউটার টিউটোরিয়াল

জাভাতে Abstract Class এবং Interface-এর পার্থক্য

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
  1. জাভাতে ইভেন্ট লিসেনার ইন্টারফেস এবং ইভেন্ট অ্যাডাপ্টার ক্লাসের মধ্যে পার্থক্য কী?

  2. অ্যাবস্ট্রাক্ট ক্লাস এবং ইন্টারফেসের পার্থক্য

  3. জাভাতে ইন্টারফেস

  4. জাভাতে অ্যাবস্ট্রাক্ট ক্লাস