জাভাতে, একটি ক্লাসের ভিতরে অন্য একটি ক্লাস ডিফাইন করা সম্ভব, এমন ক্লাসগুলোক নেস্টেড ক্লাস বলা হয়। আমরা ইনার ক্লাস-এর জন্য private, public, protected বা ডিফল্ট অ্যাক্সেস মডিফায়ার এবং আউটার ক্লাস-এর জন্য ডিফল্ট বা public অ্যাক্সেস মডিফায়ার ব্যবহার করতে পারি।
জাভাতে দুটি ধরনের নেস্টেড ক্লাস সংজ্ঞায়িত আছে।
- স্ট্যাটিক নেস্টেড ক্লাস (Static Nested Class)
- নন-স্ট্যাটিক নেস্টেড ক্লাস (Non-Static Nested Class)
স্ট্যাটিক নেস্টেড ক্লাস
- আমরা একটি ইনার ক্লাসকে static হিসেবে ডিফাইন করতে পারি, এমন ধরনের ক্লাসকে স্ট্যাটিক নেস্টেড ক্লাস বলা হয়।
- নেস্টেড ক্লাস static কীওয়ার্ড দিয়ে ডিফাইন করা থাকলে, এই ধরনের নেস্টেড ক্লাসের আউটার ক্লাসের ইনস্ট্যান্সের সাথে কোনো রিলেশনশিপ থাকে না।
- একটি স্ট্যাটিক নেস্টেড ক্লাস আমাদের ক্লাসের স্ট্যাটিক সদস্যদের অ্যাক্সেস করতে পারে।
উদাহরণ
class Car {
static class Wheel {
public void rotate() {
System.out.println("The wheel is rotating");
}
}
}
public class Test {
public static void main(String args[]) {
Car.Wheel wheel = new Car.Wheel();
wheel.rotate();
}
}
আউটপুট
The wheel is rotating
নন-স্ট্যাটিক নেস্টেড ক্লাস
- একটি নন-স্ট্যাটিক নেস্টেড ক্লাসকে পরোক্ষভাবে ইনার ক্লাস বলা হয় জাভাতে।
- ইনার ক্লাস আউটার ক্লাসের অবজেক্টের সাথে যুক্ত। তাই ইনার ক্লাস আউটার ক্লাসের অন্যান্য ভেরিয়েবল এবং মেথডের মতোই বিবেচিত হয়।
- ইনার ক্লাস আউটার ক্লাসের অবজেক্ট বা ইনস্ট্যান্সের সাথে যুক্ত থাকায়, আমরা ইনার ক্লাসের ভিতরে স্ট্যাটিক ভেরিয়েবল ডিক্লেয়ার করতে পারি না।
উদাহরণ
public class OuterClassTest {
private int a = 10;
public void innerClassInstance() {
InnerClassTest inner = new InnerClassTest();
inner.outerObject();
}
public static void main(String args[]) {
OuterClassTest outer = new OuterClassTest();
outer.innerClassInstance();
}
class InnerClassTest {
public void outerObject() {
System.out.println("Outer Value of a is: " + a);
}
}
}
আউটপুট
Outer Value of a is: 10