రెండూ పేరును తిరిగి ఉపయోగిస్తాయి, కానీ అవి ప్రాథమికంగా భిన్నమైనవి. = ఒకే పేరు, , ఒకే క్లాసులో, పరిష్కరించబడుతుంది. = ఒక సబ్క్లాస్ తో చేస్తుంది, పరిష్కరించబడుతుంది.
రెండూ పేరును తిరిగి ఉపయోగిస్తాయి, కానీ అవి ప్రాథమికంగా భిన్నమైనవి. = ఒకే పేరు, , ఒకే క్లాసులో, పరిష్కరించబడుతుంది. = ఒక సబ్క్లాస్ తో చేస్తుంది, పరిష్కరించబడుతుంది.
| ఓవర్లోడింగ్ | ఓవర్రైడింగ్ | |
|---|---|---|
| సంతకం | తప్పనిసరిగా భిన్నంగా ఉండాలి (పారామితులు) | ఒకేలా ఉండాలి |
| సంబంధం | ఒకే క్లాస్ | పేరెంట్ ↔ సబ్క్లాస్ |
| సమస్యాయుక్తమైనది | సంకలన సమయం (స్థిర) | రన్టైమ్ (డైనమిక్) |
| ఉద్దేశ్యం | సౌకర్యం / వేరియంట్లు | బహుమతపదం |
class Printer {
void print(String s) { System.out.println(s); }
void print(int n) { System.out.println(n); } // same name, diff param
void print(String s, int times) { /* ... */ }
}
కంపైలర్ వాదన రకాల ఆధారంగా ఏ print ఎంచుకుంటుంది — ఎటువంటి వారసత్వం ఉండదు.
class Animal { String speak() { return "..."; } }
class Dog extends Animal {
@Override
String speak() { return "Woof"; } // replaces Animal.speak()
}
Animal a = new Dog();
a.speak(); // "Woof" — runtime picks Dog's version (dynamic dispatch)
సాధారణ తప్పు ఆకస్మిక ఓవర్లోడింగ్ ఏ సమయంలో రైడ్ చేయాలని భావించారు (ఉ.దా. సంతకంలో టిపో). ఎల్లప్పుడూ @Override (Java) లేదా override (C#) ఉపయోగించండి తద్వారా కంపైలర్ దీన్ని పట్టుకుంటుంది.
ఓవర్రైడింగ్ బహుమతవాదం యొక్క ఇంజిన్ — "ఒక ఇంటర్ఫేస్, అనేక అమలు" పని చేయడానికి రన్టైమ్ మెకানిజం.
తేడా తెలుసుకోవడం క్లాసిక్ బగ్ను నిరోధిస్తుంది: మీరు ప్రవర్తనను భర్తీ చేసారని భావించడం ఎప్పుడు మీరు వాస్తవానికి రెండవ, ఎప్పుడూ పిలవని పద్ధతిని సృష్టించారు.