
"வணக்கம், அமிகோ!"
"வணக்கம், கிம்."
"நிலையான மற்றும் நிலையான அல்லாத உள்ளமை வகுப்புகளைப் பெறுவதைப் பற்றி நான் உங்களுக்குச் சொல்ல விரும்புகிறேன்."
"நான் தயார்."
"நிலையான உள்ளமை வகுப்புகளைப் பெறுவதில் உண்மையில் எந்தச் சிக்கல்களும் இல்லை. வழக்கமான வகுப்புகளைப் போலவே அவை மரபுரிமையாகப் பெறப்படுகின்றன:"
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()»."
"அப்படியானால், நீங்கள் லம்போர்கினி டோர் கன்ஸ்ட்ரக்டரை எந்த அளவுருவும் இல்லாமல் உருவாக்க முயற்சித்தால், நிரல் வெறுமனே தொகுக்காது. கொஞ்சம் விசித்திரமாக இருக்கிறது, இல்லையா?"
"ஆமாம், இரண்டு நுணுக்கங்கள் உள்ளன, ஆனால் அது ராக்கெட் அறிவியல் அல்ல."
GO TO FULL VERSION