வணக்கம்! நீங்கள் ஏற்கனவே ஜாவா முறைகளைப் பயன்படுத்துகிறீர்கள் மற்றும் அவற்றைப் பற்றி நிறைய அறிந்திருக்கிறீர்கள். ஒரு வகுப்பில் ஒரே பெயரில் பல முறைகள் இருக்கும் ஆனால் வெவ்வேறு அளவுருக்கள் இருக்கும் சூழ்நிலையை நீங்கள் எதிர்கொண்டிருக்கலாம். அந்தச் சமயங்களில் ஓவர்லோடிங் முறையைப் பயன்படுத்தியதை நீங்கள் நினைவுகூருவீர்கள். இன்று நாம் மற்றொரு சூழ்நிலையை கருத்தில் கொள்கிறோம். எங்களிடம் ஒரு பகிரப்பட்ட முறை உள்ளது என்று கற்பனை செய்து பாருங்கள், ஆனால் அது வெவ்வேறு வகுப்புகளில் வெவ்வேறு விஷயங்களைச் செய்ய வேண்டும். இந்த நடத்தையை எவ்வாறு செயல்படுத்துவது? புரிந்து கொள்ள, விலங்குகளைக் குறிக்கும் ஒரு விலங்கு பெற்றோர் வகுப்பைக் கருத்தில் கொள்வோம் , அதில் ஒரு பேச்சு முறையை உருவாக்குவோம் :
public class Animal {
public void speak() {
System.out.println("Hello!");
}
}
நாங்கள் இப்போதுதான் நிரலை எழுதத் தொடங்கியிருந்தாலும், நீங்கள் ஒரு சாத்தியமான சிக்கலைக் காணலாம்: உலகில் நிறைய விலங்குகள் உள்ளன, அவை அனைத்தும் வித்தியாசமாகப் பேசுகின்றன: பூனைகள் மியாவ், வாத்துகள் மற்றும் பாம்புகள் சீறுகின்றன. எங்கள் குறிக்கோள் எளிதானது: நிறைய பேசும் முறைகளை உருவாக்குவதைத் தவிர்க்கவும். மியாவிங்கிற்கான கேட்ஸ்பீக்() முறை, ஹிஸ்ஸிங்கிற்கான பாம்புப் பேச்சு() முறை போன்றவற்றை உருவாக்குவதற்குப் பதிலாக , ஸ்பீக்() என்று அழைக்க விரும்புகிறோம்.முறை மற்றும் பாம்பு சீறும், பூனை மியாவ் மற்றும் நாய் குரைக்கும். முறை மேலெழுதலைப் பயன்படுத்தி நாம் இதை எளிதாக அடையலாம். விக்கிபீடியா 'ஓவர்ரைடிங்' என்ற வார்த்தையின் பின்வரும் விளக்கத்தை அளிக்கிறது: பொருள்-சார்ந்த நிரலாக்கத்தில் முறை மேலெழுதுதல் என்பது ஒரு மொழி அம்சமாகும், இது ஒரு துணைப்பிரிவு அல்லது குழந்தை வகுப்பை அதன் சூப்பர்கிளாஸ்களில் ஒன்றால் ஏற்கனவே வழங்கப்பட்ட ஒரு முறையின் குறிப்பிட்ட செயல்படுத்தலை வழங்க அனுமதிக்கிறது. பெற்றோர் வகுப்புகள் அடிப்படையில் சரியானது. முறை மேலெழுதுதல், பெற்றோர் வகுப்பின் சில வழிமுறைகளை எடுத்து ஒவ்வொரு குழந்தை வகுப்பிலும் உங்கள் சொந்த செயலாக்கத்தை எழுத அனுமதிக்கிறது. புதிய செயல்படுத்தல் குழந்தை வகுப்பில் பெற்றோரின் செயலாக்கத்தை 'மாற்றுகிறது'. ஒரு எடுத்துக்காட்டில் இது எப்படி இருக்கிறது என்று பார்ப்போம். எங்கள் விலங்கு வகுப்பைப் பெற்ற 4 வகுப்புகளை உருவாக்கவும் :
public class Bear extends Animal {
@Override
public void speak() {
System.out.println("Growl!");
}
}
public class Cat extends Animal {
@Override
public void speak() {
System.out.println("Meow!");
}
}
public class Dog extends Animal {
@Override
public void speak() {
System.out.println("Woof!");
}
}
public class Snake extends Animal {
@Override
public void speak() {
System.out.println("Hiss!");
}
}
"எதிர்காலத்திற்கான ஒரு சிறிய லைஃப்ஹேக்: பெற்றோர் வகுப்பின் முறைகளை மேலெழுத, IntelliJ IDE இல் உள்ள குழந்தை வகுப்பின் குறியீட்டிற்குச் சென்று, Ctrl+O ஐக் கிளிக் செய்து, மெனுவில் "ஓவர்ரைடு முறைகள்..." என்பதைத் தேர்ந்தெடுக்கவும். ஹாட் கீகளைப் பயன்படுத்தப் பழகிக் கொள்ளுங்கள். ஆரம்பத்தில் இருந்தே — நிரல்களை வேகமாக எழுத இது உதவும்!நமக்குத் தேவையான நடத்தையைக் குறிப்பிட, நாங்கள் சில விஷயங்களைச் செய்தோம்:
- ஒவ்வொரு குழந்தை வகுப்பிலும், பெற்றோர் வகுப்பின் முறையின் அதே பெயரில் ஒரு முறையை உருவாக்கினோம்.
- பெற்றோர் வகுப்பில் உள்ள அதே முறையைப் பெயரிடுவது தற்செயல் நிகழ்வு அல்ல என்று தொகுப்பாளரிடம் கூறினோம்: அதன் நடத்தையை நாங்கள் மீற விரும்புகிறோம். இதை கம்பைலருக்குத் தெரிவிக்க, முறைக்கு மேலே @Override சிறுகுறிப்பை அமைத்துள்ளோம்.
ஒரு முறைக்கு மேலே வைக்கப்படும் போது, @Override சிறுகுறிப்பு கம்பைலருக்கு (அத்துடன் உங்கள் குறியீட்டைப் படிக்கும் புரோகிராமர்களுக்கும்) தெரிவிக்கிறது: 'எல்லாம் சரி. இது தவறல்ல. எனக்கு மறதி இல்லை. இதுபோன்ற ஒரு முறை ஏற்கனவே உள்ளது என்பதை நான் அறிவேன், அதை நான் மீற விரும்புகிறேன். - ஒவ்வொரு குழந்தை வகுப்பிற்கும் தேவையான செயலாக்கத்தை நாங்கள் எழுதினோம். ஸ்பீக் () முறை என்று அழைக்கப்படும்போது, பாம்பு சீற வேண்டும், கரடி உறும வேண்டும்.
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
Animal animal3 = new Bear();
Animal animal4 = new Snake();
animal1.speak();
animal2.speak();
animal3.speak();
animal4.speak();
}
}
கன்சோல் வெளியீடு:
Woof!
Meow!
Growl!
Hiss!
சிறப்பானது! எல்லாம் சரியாக வேலை செய்கிறது! விலங்கு பெற்றோர் வகுப்பின் பொருட்களைச் சேமிக்கும் 4 குறிப்பு மாறிகளை நாங்கள் உருவாக்கியுள்ளோம் , மேலும் அவர்களுக்கு 4 வெவ்வேறு குழந்தை வகுப்புகளின் நிகழ்வுகளை ஒதுக்கினோம். இதன் விளைவாக, ஒவ்வொரு பொருளும் அதன் சொந்த நடத்தையை வெளிப்படுத்துகிறது. ஒவ்வொரு குழந்தை வகுப்பிற்கும், விலங்கு வகுப்பில் உள்ள 'நேட்டிவ்' ஸ்பீக்() முறையை மாற்றியமைக்கப்பட்ட பேச்சு() முறை ( இது 'ஹலோ!' என்பதைக் காட்டுகிறது). மேலெழுதலுக்கு பல வரம்புகள் உள்ளன:
-
மேலெழுதப்பட்ட முறையானது பெற்றோர் முறையின் அதே அளவுருக்களைக் கொண்டிருக்க வேண்டும்.
பெற்றோர் வகுப்பின் பேச்சு முறை சரம் அளவுருவைக் கொண்டிருந்தால், குழந்தை வகுப்பில் உள்ள மேலெழுதப்பட்ட முறையும் ஒரு சரம் அளவுருவைக் கொண்டிருக்க வேண்டும். இல்லையெனில், கம்பைலர் பிழையை உருவாக்கும்:
public class Animal { public void speak(String s) { System.out.println("Hello! " + s); } } public class Cat extends Animal { @Override // Error! public void speak() { System.out.println("Meow!"); } }
-
மேலெழுதப்பட்ட முறையானது பெற்றோர் முறையைப் போலவே திரும்பும் வகையைக் கொண்டிருக்க வேண்டும்.
இல்லையெனில், கம்பைலர் பிழையைப் பெறுவோம்:
public class Animal { public void speak() { System.out.println("Hello!"); } } public class Cat extends Animal { @Override public String speak() { // Error! System.out.println("Meow!"); return "Meow!"; } }
-
மேலெழுதப்பட்ட முறையின் அணுகல் மாற்றியும் 'அசல்' முறையைப் போலவே இருக்க வேண்டும்:
public class Animal { public void speak() { System.out.println("Hello!"); } } public class Cat extends Animal { @Override private void speak() { // Error! System.out.println("Meow!"); } }
GO TO FULL VERSION