উত্তরাধিকারসূত্রে নেস্টেড ক্লাস - 1

"হাই, অ্যামিগো!"

"হাই কিম."

"আমি আপনাকে স্ট্যাটিক এবং নন-স্ট্যাটিক নেস্টেড ক্লাসের উত্তরাধিকার সম্পর্কে বলতে চাই।"

"আমি প্রস্তুত."

"স্ট্যাটিক নেস্টেড ক্লাসের উত্তরাধিকার নিয়ে আসলেই কোনো সমস্যা নেই। তারা নিয়মিত ক্লাসের মতোই উত্তরাধিকারসূত্রে প্রাপ্ত হয়:"

উদাহরণ
public class Car
{
 public static class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
}

"কিন্তু আমরা কি স্ট্যাটিক নেস্টেড ক্লাসগুলিকে অন্য ক্লাসে স্ট্যাটিক নেস্টেড ক্লাসের উত্তরাধিকারী করতে পারি?"

"কেন না?"

উদাহরণ
public class Car
{
 public static class Door
 {

 }
}

public class Lamborghini extends Car
{
 public static class LamborghiniDoor extends Car.Door
 {
 }
}

"ঠিক আছে, বুঝেছি। তারা নিয়মিত ক্লাসের মতোই উত্তরাধিকার সূত্রে প্রাপ্ত, তাই না?"

"হ্যাঁ। কিন্তু নন-স্ট্যাটিক নেস্টেড ক্লাস (অভ্যন্তরীণ ক্লাস হিসাবে পরিচিত) সহজে উত্তরাধিকারসূত্রে পাওয়া যায় না।"

"যখন একটি অভ্যন্তরীণ শ্রেণীর একটি উদাহরণ তৈরি করা হয়, তখন এর বাইরের শ্রেণীর একটি রেফারেন্স সংরক্ষণ করা হয় এবং নিহিতভাবে কনস্ট্রাক্টরের কাছে প্রেরণ করা হয়।"

"ফলে, যখন আপনি একটি ক্লাসের অবজেক্ট তৈরি করেন যা একটি অভ্যন্তরীণ শ্রেণীর উত্তরাধিকারী হয়, আপনাকে অবশ্যই প্রয়োজনীয় বাইরের বস্তুটি স্পষ্টভাবে পাস করতে হবে।"

"এই এটা দেখায় কিভাবে হয়:"

কোড
public class Car
{
 public class Door
 {

 }
}

public class LamborghiniDoor extends Car.Door
{
 LamborghiniDoor(Car car)
 {
  car.super();
 }
}

"আপনাকে অবশ্যই ডোর কনস্ট্রাক্টরের কাছে একটি কার অবজেক্ট অবশ্যই পাস করতে হবে। এটি একটি বিশেষ কনস্ট্রাক্ট ব্যবহার করে করা হয়: «car.super()»।"

"যাইহোক, আপনি যদি কোনো প্যারামিটার ছাড়াই LamborghiniDoor কনস্ট্রাক্টর তৈরি করার চেষ্টা করেন, তাহলে প্রোগ্রামটি কম্পাইল হবে না। একটু অদ্ভুত, তাই না?"

"হ্যাঁ, কয়েকটি সূক্ষ্মতা রয়েছে, তবে এটি রকেট বিজ্ঞান নয়।"