একটি ক্লাসের ভিতরে ডিক্লেয়ার করা ক্লাস কিন্তু মেথডের বাইরে তাকে মেম্বার ইনার ক্লাস বলা হয়।
আমরা একটি মেম্বার ইনার ক্লাস দুটি উপায়ে ইনস্ট্যানশিয়েট করতে পারি
- ক্লাসের ভিতরে আহ্বান (Invoked within the class)
- ক্লাসের বাইরে আহ্বান (Invoked outside the class)
ইনার ক্লাসের নিয়ম
- আউটার ক্লাস (ইনার ক্লাস ধারণকারী ক্লাস) তার কোডের ভিতরে যতখানি ইচ্ছে ততখানি ইনার ক্লাস অবজেক্ট ইনস্ট্যানশিয়েট করতে পারে।
- যদি ইনার ক্লাস পাবলিক হয় এবং কন্টেইনিং ক্লাসটিও পাবলিক হয়, তবে অন্য কোনো অলগ ক্লাসের কোডও ইনার ক্লাসের ইনস্ট্যান্স তৈরি করতে পারে।
- আউটার ক্লাস অবজেক্টের সাথে কোনো ইনার ক্লাস অবজেক্ট অটোমেটিক্যালি ইনস্ট্যানশিয়েট হয় না।
- যদি ইনার ক্লাস স্ট্যাটিক হয়, তবে স্ট্যাটিক ইনার ক্লাস আউটার ক্লাস ইনস্ট্যান্স ছাড়া ইনস্ট্যানশিয়েট করা যায়। অন্যথায়, ইনার ক্লাস অবজেক্ট অবশ্যই আউটার ক্লাসের একটি ইনস্ট্যান্সের সাথে অ্যাসোসিয়েটেড হতে হবে।
- আউটার ক্লাস ইনার ক্লাসের প্রাইভেট মেথডও কল করতে পারে।
ক্লাসের ভিতরে আহ্বান করা মেম্বার ইনার ক্লাস
নিচের উদাহরণে, আমরা OuterClass-এর display() মেথড থেকে মেম্বার ইনার ক্লাসের মেথড আহ্বান করছি।
উদাহরণ
public class OuterClass {
private int value = 20;
class InnerClass {
void show() {
System.out.println("Value is: " + value);
}
}
void display() {
InnerClass ic = new InnerClass();
ic.show();
}
public static void main(String args[]){
OuterClass oc = new OuterClass();
oc.display();
}
}
Value is: 20
ক্লাসের বাইরে আহ্বান করা মেম্বার ইনার ক্লাস
নিচের উদাহরণে, আমরা Test ক্লাস থেকে OuterClass-এর বাইরে InnerClass-এর show() মেথড আহ্বান করছি।
উদাহরণ
class OuterClass {
private int value = 20;
class InnerClass {
void show() {
System.out.println("Value is: "+ value);
}
}
}
public class Test {
public static void main(String args[]) {
OuterClass obj = new OuterClass();
OuterClass.InnerClass in = obj.new InnerClass();
in.show();
}
}
আউটপুট
Value is: 20