"ஹலோ, அமிகோ! ரெண்டு நாளைக்கு முன்னாடியே ஓவர்லோடிங் முறைகள் பற்றிச் சொன்னேன். உங்களுக்கு எல்லாம் புரியுதா?"

"ஆம். எனக்கு நினைவிருக்கிறது. ஒவ்வொரு வகுப்பு முறையும் தனித்துவமாக இருக்க வேண்டும். அதே பெயர் மற்றும் அளவுரு வகைகளுடன் (மற்றும் அளவுருக்களின் வரிசை முக்கியமானது) வகுப்பிற்கு வேறு எந்த முறையும் இல்லை என்றால் உறுப்பினர் முறை தனித்துவமானது."

"மிகவும் நல்லது! நீங்கள் அந்த பாடத்தை நன்றாக கற்றுக்கொண்டதை நான் காண்கிறேன். இன்று இந்த தலைப்பில் உங்கள் அறிவை கொஞ்சம் விரிவுபடுத்த விரும்புகிறேன். ஒவ்வொரு விஷயத்திலும் என்ன முறை அழைக்கப்படும் என்று நீங்கள் நினைக்கிறீர்கள்?"

குறியீடு
class Cat
{
 public static void print(int n)
 {
  System.out.println(n);
 }
 public static void print(short n)
 {
  System.out.println(n);
 }
 public static void print(Integer n)
 {
  System.out.println(n);
 }
 public static void print(String s)
 {
  System.out.println(s);
 }
public static void main(String[] args)
{
  Cat.print(1);
  Cat.print((byte)1);
  Cat.print("1");
  Cat.print(null);
 }
}

"சொல்வது கடினம்."

"முதல் வழக்கில், 1 என்பது ஒரு எண்ணாகும் . ஒரு எண்ணை எடுக்கும் முறையுடன் 100% பொருத்தம் உள்ளது. முதல் வெற்றிட அச்சு (int n) என்று அழைக்கப்படும்.

இரண்டாவது வழக்கில், பைட் எடுக்கும் முறை எங்களிடம் இல்லை. ஆனால் ஒரு குறுகிய மற்றும் ஒரு முழு எண்ணாக இரண்டு முறைகள் உள்ளன. வகை விரிவாக்க விதிகளின் அடிப்படையில், ஒரு பைட் முதலில் சுருக்கமாக விரிவுபடுத்தப்படும், பின்னர் ஒரு எண்ணாக விரிவுபடுத்தப்படும். இதனால், அந்தத் தீர்ப்பு வெற்றிடமான அச்சு(short n) ஆகும் . அழைக்கப்படும்.

மூன்றாவது வழக்கில், சரம் எடுக்கும் முறையுடன் 100% பொருத்தம் உள்ளது. வெற்றிட அச்சு (சரம் கள்). முறை அழைக்கப்படும்.

நான்காவது வழக்கு தெளிவற்றது. nullக்கு ஒரு குறிப்பிட்ட வகை இல்லை. கம்பைலர் இந்தக் குறியீட்டை தொகுக்க மறுப்பார் . இந்த நிலையில், மூன்றாவது முறையை அழைக்க Cat.print((Integer)null) என்றும் நான்காவது முறையை அழைக்க Cat.print((String)null) என்றும் எழுத வேண்டும் ."

"அது மிகவும் தகவல். நன்றி."

"அழைப்பதற்கான சரியான முறையைத் தீர்மானிக்கும்போது, ​​வகைகளை விரிவுபடுத்த மட்டுமே முடியும். அவை குறுகலாகாது. இந்த உதாரணத்தைக் கவனியுங்கள்:"

குறியீடு
class Cat
{
 public static void print(short n)
 {
  System.out.println(n);
 }
 public static void print(Integer n)
 {
  System.out.println(n);
 }

 public static void main(String[] args)
 {
  Cat.print((byte)1);
  Cat.print(1);
 }
}

முதல் வழக்கில், பைட் வகை குறுகியதாக விரிவுபடுத்தப்படும் மற்றும் முதல் முறை அழைக்கப்படும்: வெற்றிட அச்சு(குறுகிய n). .

இரண்டாவது வழக்கில், முழு எண்ணிலிருந்து முழு எண்ணாக ஒரு மறைமுகமான விரிவாக்கம் இருக்கும், பின்னர் இரண்டாவது முறை அழைக்கப்படும்: void print(Integer n). .

"நான் அதை எதிர்பார்க்கவில்லை."

"இல்லை, இதோ உண்மையான ஆச்சரியம்:"

ஜாவா குறியீடு விளக்கம்
class Cat
{
 public static void print(Object o)
 {
  System.out.println(o);
 }
 public static void print(String s)
 {
  System.out.println(s);
 }

 public static void main(String[] args)
 {
  Cat.print(1);
  Cat.print(null);
 }
}
முதல் வழக்கில், int ஆனது முழு எண்ணாக நீட்டிக்கப்படும். முழு எண்ணுக்கு எந்த முறையும் இல்லாததால், மிகவும் பொருத்தமான முறை (மற்றும் அழைக்கப்படுகிறது) void print(Object o)

இரண்டாவது வழக்கில், தொகுத்தல் பிழைகள் இருக்காது மற்றும் வெற்றிட அச்சு (ஸ்ட்ரிங் கள்) என்று அழைக்கப்படும், இது ஓரளவு தெளிவாக இல்லை.

"அமிகோ, இது போன்ற சமயங்களில் எந்த முறை அழைக்கப்படுகிறது என்பதைத் தெரிந்துகொள்வதற்காக ஒரு வகை காஸ்ட் ஆபரேட்டரைக் குறிப்பிடுவது சிறந்தது என்பதை நீங்கள் புரிந்துகொள்வீர்கள் என்று நம்புகிறேன்."

"ஓவர்லோடிங் முறைகளால் எந்த பிரச்சனையும் வரும் என்று நான் எதிர்பார்க்கவே இல்லை. ஆனால் நீங்களும் சேர்ந்து வாருங்கள். நன்றி, ரிஷி. நான் இந்த விஷயத்தில் என் பாதுகாப்பைக் காத்துக்கொள்வேன்."