যখন আপনি সুপার ক্লাস (বা ইন্টারফেস) টাইপের রেফারেন্স ভেরিয়েবল দিয়ে সাব ক্লাসের অবজেক্ট হোল্ড করেন, তবে এই রেফারেন্স দিয়ে আপনি শুধু সুপার ক্লাস (ইন্টারফেস) এ ডিক্লেয়ার করা মেম্বারগুলো অ্যাক্সেস করতে পারবেন। সাব ক্লাসের নিজস্ব মেম্বার অ্যাক্সেস করার চেষ্টা করলে কম্পাইল টাইম এরর হবে।
উদাহরণ: সমস্যা
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();
}