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

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

Class (ক্লাস)

একটি class হলো একটি ব্লুপ্রিন্ট (blueprint) जिससे থেকে 개별 অবজেক্টগুলো তৈরি হয়। একটি ক্লাস নিচের ভেরিয়েবল টাইপগুলো ধারণ করতে পারে:

  • Local variables (লোকাল ভেরিয়েবল) — মেথড, কনস্ট্রাক্টর বা ব্লকের ভিতরে ডিফাইন করা ভেরিয়েবল। মেথড কমপ্লিট হলে ভেরিয়েবল নষ্ট হয়।

  • Instance variables (ইনস্ট্যান্স ভেরিয়েবল) — ক্লাসের ভিতরে কিন্তু মেথডের বাইরে থাকা ভেরিয়েবল। ক্লাস ইনস্ট্যানশিয়েট হলে ইনিশিয়ালাইজ হয়। ক্লাসের যেকোনো মেথড, কনস্ট্রাক্টর বা ব্লক থেকে অ্যাক্সেসযোগ্য।

  • Class variables (ক্লাস ভেরিয়েবল) — ক্লাসের ভিতরে, মেথডের বাইরে, static কীওয়ার্ডসহ ডিক্লেয়ার করা ভেরিয়েবল।

Interface (ইন্টারফেস)

একটি interface হলো Java-তে একটি রেফারেন্স টাইপ। এটি ক্লাসের মতো। এটি অ্যাবস্ট্রাক্ট মেথডের একটি কালেকশন। একটি ক্লাস ইন্টারফেস ইমপ্লিমেন্ট করে, তarske ইন্টারফেসের অ্যাবস্ট্রাক্ট মেথডগুলো ইনহেরিট করতে হয়।

অ্যাবস্ট্রাক্ট মেথডের পাশাপাশি ইন্টারফেসে কনস্ট্যান্ট, ডিফল্ট মেথড, স্ট্যাটিক মেথড এবং নেস্টেড টাইপও থাকতে পারে। মেথড বডি শুধু ডিফল্ট মেথড এবং স্ট্যাটিক মেথডের জন্য থাকে।

ইন্টারফেস লেখা ক্লাস লেখার মতোই। কিন্তু ক্লাস একটি অবজেক্টের অ্যাট্রিবিউট এবং বিহেভিয়র বর্ণনা করে। আর ইন্টারফেসে সেসব বিহেভিয়র থাকে যা একটি ক্লাস ইমপ্লিমেন্ট করে।

Class এবং Interface-এর মধ্যে গুরুত্বপূর্ণ পার্থক্য

ক্র. নং কী Class Interface
১ সাপোর্টেড মেথড (Supported Methods) একটি ক্লাসে অ্যাবস্ট্রাক্ট এবং কনক্রিট (concrete) দুটি মেথডই থাকতে পারে। ইন্টারফেসে শুধু অ্যাবস্ট্রাক্ট মেথড থাকে। Java 8 থেকে ডিফল্ট ও স্ট্যাটিক মেথডও থাকতে পারে।
২ মাল্টিপল ইনহেরিটেন্স (Multiple Inheritance) মাল্টিপল ইনহেরিটেন্স সাপোর্ট করা নেই। ইন্টারফেস মাল্টিপল ইনহেরিটেন্স সাপোর্ট করে।
৩ সাপোর্টেড ভেরিয়েবল (Supported Variables) final, non-final, static এবং non-static সব ধরনের ভেরিয়েবল সাপোর্ট করা থাকে। শুধু static এবং final ভেরিয়েবল অনুমোদিত।
৪ ইমপ্লিমেন্টেশন (Implementation) একটি ক্লাস ইন্টারফেস ইমপ্লিমেন্ট করতে পারে। ইন্টারফেস ইন্টারফেস ইমপ্লিমেন্ট করতে পারে না, শুধু এক্সটেন্ড (extend) করতে পারে।
৫ কীওয়ার্ড (Keyword) Class ডিক্লেয়ার করতে class কীওয়ার্ড ব্যবহার করা হয়। Interface ডিক্লেয়ার করতে interface কীওয়ার্ড ব্যবহার করা হয়।
৬ ইনহেরিটেন্স (Inheritance - extends) একটি ক্লাস extends কীওয়ার্ড দিয়ে অন্য ক্লাস ইনহেরিট করতে পারে এবং ইন্টারফেস ইমপ্লিমেন্ট করতে পারে। ইন্টারফেস শুধু ইন্টারফেস ইনহেরিট করতে পারে।
৭ ইনহেরিটেন্স (Inheritance - ব্যবহার) একটি ক্লাস extends কীওয়ার্ড দিয়ে ইনহেরিট করা যায়। ইন্টারফেস শুধু implements কীওয়ার্ড দিয়ে ইমপ্লিমেন্ট করা যায়।
৮ অ্যাক্সেস (Access) একটি ক্লাসে যেকোনো টাইপের মেম্বার থাকতে পারে (private, public, protected, default)। ইন্টারফেসে শুধু public মেম্বার থাকতে পারে।
৯ কনস্ট্রাক্টর (Constructor) একটি ক্লাসে কনস্ট্রাক্টর মেথড থাকতে পারে। ইন্টারফেসে কনস্ট্রাক্টর থাকতে পারে না।

Class vs Interface উদাহরণ

JavaTester.java

public class JavaTester {
    public static void main(String args[]) {
        Animal tiger = new Tiger();
        tiger.eat();
        Tiger tiger1 = new Tiger();
        tiger1.eat();
    }
}

interface Animal {
    public void eat();
}

class Tiger implements Animal {
    public void eat(){
        System.out.println("Tiger eats");
    }
}

আউটপুট

Tiger eats
Tiger eats
  1. জাভাতে ইভেন্ট লিসেনার ইন্টারফেস এবং ইভেন্ট অ্যাডাপ্টার ক্লাসের মধ্যে পার্থক্য কী?

  2. জাভাতে ClassNotFoundException এবং NoClassDefFoundError-এর পার্থক্য কী?

  3. জাভাতে Exception ক্লাস এবং Error ক্লাসের পার্থক্য

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