ओवरलोडिंग और ओवरराइडिंग में क्या अंतर है।
ओवरलोडिंग और ओवरराइडिंग में क्या अंतर है।
जवाबों:
ओवरलोडिंग
ओवरलोडिंग तब होती है जब आपके पास एक ही स्कोप में कई तरीके होते हैं, एक ही नाम लेकिन अलग-अलग हस्ताक्षर।
//Overloading
public class test
{
public void getStuff(int id)
{}
public void getStuff(string name)
{}
}
अधिभावी
ओवरराइडिंग एक सिद्धांत है जो आपको एक बच्चे की कक्षा में एक विधि की कार्यक्षमता को बदलने की अनुमति देता है।
//Overriding
public class test
{
public virtual void getStuff(int id)
{
//Get stuff default location
}
}
public class test2 : test
{
public override void getStuff(int id)
{
//base.getStuff(id);
//or - Get stuff new location
}
}
void
के लिए getStuff
मेंtest2
getStuff(2, "Hello world!");
या मैं यह कर सकता हूं getStuff("Myname", "Mysurname", "Hello World!");
? कोई भी पुष्टि कर सकता है कि यह ऐसा करने का तरीका है?
ओवरलोडिंग और ओवरराइडिंग के लिए सरल परिभाषाएँ
ओवरलोडिंग (संकलित समय बहुरूपता) :: एक ही नाम और विभिन्न मापदंडों के साथ कार्य
public class A
{
public void print(int x, int y)
{
Console.WriteLine("Parent Method");
}
}
public class B : A
{
public void child()
{
Console.WriteLine("Child Method");
}
public void print(float x, float y)
{
Console.WriteLine("Overload child method");
}
}
ओवरराइडिंग (रन टाइम पोलिमोर्फिज्म) :: बेस क्लास के समान ही नाम और उसी पैरामीटर के साथ विस्तारित क्लास में कार्य, लेकिन विभिन्न व्यवहारों के साथ।
public class A
{
public virtual void print()
{
Console.WriteLine("Parent Method");
}
}
public class B : A
{
public void child()
{
Console.WriteLine("Child Method");
}
public override void print()
{
Console.WriteLine("Overriding child method");
}
}
मैं एक उदाहरण साझा करना चाहता हूं जिसने मुझे सीखते समय बहुत कुछ समझ में आया:
यह सिर्फ एक उदाहरण है जिसमें आभासी विधि या आधार वर्ग शामिल नहीं है। सिर्फ मुख्य विचार के बारे में एक संकेत देने के लिए।
मान लीजिए कि एक वाहन वॉशिंग मशीन है और इसमें "वॉश" नामक एक फ़ंक्शन है और कार को एक प्रकार के रूप में स्वीकार करता है।
कार इनपुट प्राप्त करता है और कार को धोता है।
public void Wash(Car anyCar){
//wash the car
}
चलो अधिक भार धो () फ़ंक्शन
ओवरलोडिंग:
public void Wash(Truck anyTruck){
//wash the Truck
}
वॉश फंक्शन केवल एक कार को धोने से पहले था, लेकिन अब एक ट्रक को धोने के लिए इसकी अतिभारित है।
वॉश () फ़ंक्शन को ओवरराइड करते हैं
अधिभावी:
public override void Wash(Car anyCar){
//check if the car has already cleaned
if(anyCar.Clean){
//wax the car
}
else{
//wash the car
//dry the car
//wax the car
}
}
वॉश फ़ंक्शन में अब यह जांचने के लिए एक शर्त है कि कार पहले से ही साफ है और फिर से धोने की आवश्यकता नहीं है।
यदि कार साफ है, तो बस इसे मोम दें।
अगर साफ नहीं है, तो पहले कार को धोएं, फिर उसे सुखाएं और फिर वैक्स करें
।
इसलिए नई कार्यक्षमता जोड़कर कार्यक्षमता को ओवरराइड किया गया है या कुछ अलग किया है।
एक साक्षात्कारकर्ता साक्षात्कारकर्ता का अनुसरण करेगा:
जैसा कि माइकल ने कहा:
तथा
एक ही नाम के साथ एक से अधिक विधियां / निर्माणकर्ता लेकिन विभिन्न मापदंडों को ओवरलोडिंग कहा जाता है। यह एक संकलन समय की घटना है।
Class Addition
{
int add(int a, int b)
{
return a+b;
}
int add(int a, int b, int c)
{
return a+b+c;
}
public static main (String[] args)
{
Addition addNum = new Addition();
System.out.println(addNum.add(1,2));
System.out.println(addNum.add(1,2,3));
}
}
ओ / p:
3
6
ओवरराइडिंग एक रन टाइम ईवेंट है, जिसका अर्थ है आपके कोड के आधार पर रन टाइम में आउटपुट में बदलाव।
class Car
{
public int topSpeed()
{
return 200;
}
}
class Ferrari extends Car
{
public int topSpeed()
{
return 400;
}
public static void main(String args[])
{
Car car = new Ferrari();
int num= car.topSpeed();
System.out.println("Top speed for this car is: "+num);
}
}
ध्यान दें कि दोनों वर्गों में एक सामान्य विधि है टॉपस्पीड ()। चूंकि हमने एक फेरारी को त्वरित किया है, इसलिए हमें एक अलग परिणाम मिलता है।
ओ / p:
Top speed for this car is: 400
सी # में वहाँ की तरह कोई जावा है छिपा ओवरराइड कीवर्ड के बिना, ओवरराइड विधि अधिभावी पर! इन सी # कार्यान्वयन देखें:
ओवरराइड के बिना संस्करण 1 : परिणाम 200 है
class Car {
public int topSpeed() {
return 200;
}
}
class Ferrari : Car {
public int topSpeed(){
return 400;
}
}
static void Main(string[] args){
Car car = new Ferrari();
int num= car.topSpeed();
Console.WriteLine("Top speed for this car is: "+num);
Console.ReadLine();
}
ओवरराइड कीवर्ड के साथ वेरिएंट 2 : परिणाम 400 है
class Car {
public virtual int topSpeed() {
return 200;
}
}
class Ferrari : Car {
public override int topSpeed(){
return 400;
}
}
static void Main(string[] args){
Car car = new Ferrari();
int num= car.topSpeed();
Console.WriteLine("Top speed for this car is: "+num);
Console.ReadLine();
}
कार क्लास पर कीवर्ड वर्चुअल जावा पर फाइनल के लिए विपरीत है , इसका मतलब अंतिम नहीं है , यदि आप कार सार थे, तो आप ओवरराइड कर सकते हैं या लागू कर सकते हैं
शैडोइंग = व्युत्पन्न वर्ग में दो परिभाषाओं को बनाए रखता है और बेस क्लास परिभाषा को प्रोजेक्ट करने के लिए यह क्लास की परिभाषा और इसके विपरीत छाया (छुपाता) करता है।
जोड़ने का एक और बिंदु।
ओवरलोडिंग एक ही नाम के साथ एक से अधिक विधि। समान या अलग वापसी प्रकार। विभिन्न प्रकार के पैरामीटर या विभिन्न प्रकार के पैरामीटर नहीं। समान वर्ग या व्युत्पन्न वर्ग में।
int Add (int num1, int num2) int Add (int num1, int num2, int num3) डबल ऐड (int num1, int num2) डबल ऐड (डबल num1, डबल num2)
एक ही वर्ग या व्युत्पन्न वर्ग में संभव हो सकता है। आम तौर पर एक ही कक्षा में पसंद किया जाता है। जैसे कंसोल। क्राइटलाइन () में 19 ओवरलोड तरीके हैं।
क्लास कंस्ट्रक्टर्स, तरीकों को ओवरलोड कर सकते हैं।
संकलन समय (स्थिर / प्रारंभिक बंधन) बहुरूपता के रूप में विचार कर सकते हैं।
================================================== ================================================== =
एक ही कक्षा में ओवरराइडिंग संभव नहीं हो सकती है। वर्ग विधियों, गुणों, अनुक्रमकों, घटनाओं को ओवरराइड कर सकते हैं।
कुछ सीमाएँ हैं जैसे ओवरराइड आधार विधि आभासी, सार या ओवरराइड होनी चाहिए। ओवरराइड विधि को संशोधित करने के लिए आप नए, स्थिर या वर्चुअल संशोधक का उपयोग नहीं कर सकते।
रन टाइम (डायनामिक / लेट बाइंडिंग) बहुरूपता के रूप में विचार कर सकते हैं।
Http://msdn.microsoft.com/en-us/library/6fawty39.aspx के संस्करण में मदद करता है
================================================== ================================================== =
सहायक लिंक्स
http://msdn.microsoft.com/en-us/library/ms173152.aspx संकलन समय बहुरूपता बनाम रन टाइम बहुरूपता
ओवरलोडिंग स्थैतिक बहुरूपता का एक हिस्सा है और इसका उपयोग एक ही नाम लेकिन विभिन्न हस्ताक्षरों के साथ अलग-अलग विधि को लागू करने के लिए किया जाता है। अधूरा तरीका पूरा करने के लिए ओवरराइडिंग का उपयोग किया जाता है। मेरी राय में इन दोनों अवधारणाओं के बीच कोई तुलना नहीं है, केवल एक चीज समान है कि दोनों एक ही शब्दावली के साथ आते हैं जो खत्म हो गई है।
मेथड ओवरलोडिंग और मेथड ओवरराइडिंग 2 अलग-अलग अवधारणाएं पूरी तरह से अलग हैं। मेथड ओवरलोडिंग में एक ही विधि का नाम है, लेकिन विभिन्न हस्ताक्षर के साथ। ओवरराइडिंग का तरीका व्युत्पन्न वर्ग में बेस क्लास पद्धति के डिफ़ॉल्ट कार्यान्वयन को बदल रहा है। नीचे आप इन अवधारणाओं को समझाने वाले 2 उत्कृष्ट वीडियो ट्यूटोरियल पा सकते हैं।
ओवरलोडिंग वह अवधारणा है जिसमें आपके पास एक ही नाम के साथ एक ही हस्ताक्षर या विधियां होती हैं, लेकिन अलग-अलग पैरामीटर और ओवरराइडिंग होते हैं, हमारे पास एक ही नाम के तरीके अलग-अलग मापदंडों के साथ होते हैं, इनहेरिटेंस को ओवरराइडिंग के रूप में भी जाना जाता है।