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

জাভাতে ইন্টারফেস অবজেক্ট দিয়ে ডারাইভড ক্লাসের মেম্বার ভেরিয়েবল কীভাবে অ্যাক্সেস করবেন?

যখন আপনি সুপার ক্লাস (বা ইন্টারফেস) টাইপের রেফারেন্স ভেরিয়েবল দিয়ে সাব ক্লাসের অবজেক্ট হোল্ড করেন, তবে এই রেফারেন্স দিয়ে আপনি শুধু সুপার ক্লাস (ইন্টারফেস) এ ডিক্লেয়ার করা মেম্বারগুলো অ্যাক্সেস করতে পারবেন। সাব ক্লাসের নিজস্ব মেম্বার অ্যাক্সেস করার চেষ্টা করলে কম্পাইল টাইম এরর হবে।

উদাহরণ: সমস্যা

interface Sample {
    void demoMethod1();
}

public class InterfaceExample implements Sample {
    public void display() {
        System.out.println("This is a method of the sub class");
    }

    public void demoMethod1() {
        System.out.println("This is demo method-1");
    }

    public static void main(String args[]) {
        Sample obj = new InterfaceExample();
        obj.demoMethod1(); // OK - ইন্টারফেসে আছে
        obj.display();     // ERROR - ইন্টারফেসে নেই
    }
}

কম্পাইল টাইম এরর

InterfaceExample.java:14: error: cannot find symbol
    obj.display();
    ^
symbol: method display()
location: variable obj of type Sample
1 error

সমাধান: টাইপ কাস্টিং (Type Casting)

সাব ক্লাসের মেম্বার অ্যাক্সেস করতে হলে রেফারেন্সকে সাব ক্লাস টাইপে কাস্ট করতে হবে।

public static void main(String args[]) {
    Sample obj = new InterfaceExample();
    obj.demoMethod1();
    ((InterfaceExample) obj).display(); // ডাউনকাস্টিং
}

আউটপুট

This is demo method-1
This is a method of the sub class

দ্রষ্টব্য: ডাউনকাস্টিং করার আগে instanceof চেক করা ভালো প্র্যাকটিস, অন্যথায় রানটাইমে ClassCastException হতে পারে।

if (obj instanceof InterfaceExample) {
    ((InterfaceExample) obj).display();
}
  1. জাভাতে মেম্বার ইনার ক্লাস কীভাবে ইনস্ট্যানশিয়েট করবেন?

  2. জাভাতে অ্যানোনিমাস ইনার ক্লাস ব্যবহার করে ইন্টারফেস ইমপ্লিমেন্ট করা

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

  4. জাভা প্যাকেজ অন্য প্যাকেজ থেকে অ্যাক্সেস করা