"হাই, অ্যামিগো!"
"হাই, এলি!"
"আজ আমাদের একটি খুব আকর্ষণীয় বিষয় আছে। আজ আমি আপনাকে নেস্টেড ক্লাস সম্পর্কে বলতে যাচ্ছি।"
"যদি একটি ক্লাস অন্য ক্লাসের ভিতরে ঘোষণা করা হয়, তবে এটি একটি নেস্টেড ক্লাস। নন-স্ট্যাটিক নেস্টেড ক্লাসগুলিকে ভিতরের ক্লাস বলা হয়।"
"একটি অভ্যন্তরীণ শ্রেণীর বস্তুগুলি বাইরের শ্রেণীর বস্তুর ভিতরে নেস্ট করা হয় এবং তাই বাইরের শ্রেণীর ভেরিয়েবলগুলি অ্যাক্সেস করতে পারে।"
public class Car
{
int height = 160;
ArrayList doors = new ArrayList();
public Car
{
doors.add(new Door());
doors.add(new Door());
doors.add(new Door());
doors.add(new Door());
}
class Door()
{
public int getDoorHeight()
{
return (int)(height * 0.80);
}
}
}
"উল্লেখ্য যে ডোর ক্লাসের একটি getDoorHeight পদ্ধতি রয়েছে। এটি কার অবজেক্টের উচ্চতা পরিবর্তনশীল ব্যবহার করে এবং দরজার উচ্চতা প্রদান করে।"
"একটি ডোর অবজেক্ট একটি কার অবজেক্ট থেকে স্বাধীনভাবে থাকতে পারে না। সর্বোপরি, এটি কার অবজেক্টের ভেরিয়েবল ব্যবহার করে। কম্পাইলারটি অদৃশ্যভাবে কনস্ট্রাক্টর এবং ডোর ক্লাসে বাইরের কার অবজেক্টের একটি রেফারেন্স যোগ করে, যাতে অভ্যন্তরীণ দরজা ক্লাসের পদ্ধতিগুলি বাইরের কার ক্লাসের ভেরিয়েবলগুলি অ্যাক্সেস করতে পারে এবং এর পদ্ধতিগুলিকে কল করতে পারে।"
"নেস্টেড অবজেক্ট। আমার কাছে বোধগম্য। ডায়াগ্রাম দিয়ে বিচার করলে, সবকিছুই বেশ সোজা।"
"এবং তাই হয়. কিছু সূক্ষ্মতা ছাড়া।"
"অভ্যন্তরীণ দরজা ক্লাসে গাড়ির বস্তুর একটি উল্লেখ রয়েছে, তাই:"
1) আপনি কার ক্লাসের একটি স্ট্যাটিক পদ্ধতির ভিতরে একটি ডোর অবজেক্ট তৈরি করতে পারবেন না, কারণ স্ট্যাটিক পদ্ধতিতে কার অবজেক্টের একটি রেফারেন্স থাকে না যা ডোর কনস্ট্রাক্টরের কাছে স্পষ্টভাবে পাস করা হয়।
সঠিক | ত্রুটিপূর্ণ |
---|---|
|
|
2) ডোর ক্লাসে স্ট্যাটিক ভেরিয়েবল বা পদ্ধতি থাকতে পারে না।
সঠিক | ত্রুটিপূর্ণ |
---|---|
|
|
"এবং যদি আমার একটি ভেরিয়েবলের প্রয়োজন হয় যা সমস্ত ডোর অবজেক্ট দ্বারা ভাগ করা হয়?"
"আপনি সর্বদা এটিকে গাড়ির ক্লাসে সহজভাবে ঘোষণা করতে পারেন। তারপরে এটি একটি গাড়ি অবজেক্টে থাকা সমস্ত ডোর অবজেক্ট দ্বারা ভাগ করা হবে।"
3) দ্রষ্টব্য: যদি অভ্যন্তরীণ শ্রেণীটিকে সর্বজনীন হিসাবে ঘোষণা করা হয়, তবে এর উদাহরণগুলি বাইরের শ্রেণীর বাইরে তৈরি করা যেতে পারে, তবে বাইরের শ্রেণীর একটি উদাহরণ অবশ্যই আগে বিদ্যমান থাকতে হবে:
Car car = new Car();
Car.Door door = car.new Door();
Car.Door door = new Car().newDoor();
4) এবং আরও একটি মন্তব্য যা আমি প্রায় ভুলে গেছি।
"যেহেতু আমাদের কাছে দুটি নেস্টেড অবজেক্ট আছে, অভ্যন্তরীণ অবজেক্টের পদ্ধতিতে 'এই' নামক দুটি রেফারেন্সে অ্যাক্সেস রয়েছে:"
public class Car
{
int width, height;
public class Door
{
int width, height;
public void setHeight(int height)
{
this.height = height;
}
public int getHeight()
{
if (height != 0)
return this.height;
else
return (int)(Car.this.height * 0.8);
}
}
"আমি ইচ্ছাকৃতভাবে ক্লাসে একই নামের ভেরিয়েবল ঘোষণা করেছি।"
"বাইরের ক্লাস থেকে একটি ভেরিয়েবল অ্যাক্সেস করতে যখন এটি লুকানো থাকে, বা একটি অভ্যন্তরীণ ক্লাসের ভিতরে 'এই' অ্যাক্সেস করতে, কেবল 'YourClassName.this' লিখুন:"
Car.this
Car.Door.this
Car.Door.InnerClass2.InnerClass3.this
"তাহলে, যদি আমরা একটি অভ্যন্তরীণ শ্রেণীর পদ্ধতির ভিতরে 'এই' লিখি, তাহলে 'এই' অভ্যন্তরীণ শ্রেণীকে বোঝায়?"
"হ্যাঁ অবশ্যই."
"আপনি ভিতরের ক্লাস সম্পর্কে কি মনে করেন, আমিগো?"
"তারা খুব আকর্ষণীয়। আমি বলব না যে তারা খুব কঠিন।"
"এখানে অনেক বিধিনিষেধ রয়েছে, তবে আপনি এই বিধিনিষেধগুলি কোথা থেকে এসেছে এবং কেন তারা বিদ্যমান তা ব্যাখ্যা করার পরে সেগুলি বেশ যৌক্তিক বলে মনে হচ্ছে।"
"এছাড়া, আমি দুই মাস ধরে টাস্কে নেস্টেড ক্লাস লিখছি, কিন্তু এখনই বুঝতে পারছি আমি আসলে কী লিখছি।"
"দারুণ পাঠের জন্য ধন্যবাদ, এলি।"
"আমি আনন্দিত যে আপনি এটি পছন্দ করেছেন, আমিগো।"
GO TO FULL VERSION