Theory
Members, librarians, અને deja vu
BookBridge ને હવે people જોઈએ છે, not just books. Member ની પાસે name, ID, borrowed books છે. Librarian ની પાસે name, ID, staff code છે.
તમે 2 classes લખવાનું start કરો છો અને Semester 3 નો deja vu feel કરો છો: same name field, same ID logic, twice copied. BCA304 માં તમે આ exact smell ને C++ માં inheritance સાથે solve કર્યું હતું.
Java ની version એ એક keyword છે: class Member extends Person. અને family ની top પર, Java તેનો best trick build કરે છે: polymorphism.
Theory
3 pillars, BookBridge terms માં
Encapsulation: public methods પાછળ private data. Member નું fineDue private છે; માત્ર payFine() એને reduce કરી શકે છે. તમે આને access-controls lesson માં build કર્યું હતું; હવે એને exam name મળ્યું છે.
Inheritance: class Member extends Person Member ને દરેક Person field અને method આપે છે, plus તેના પોતાના. One parent maximum: Java classes માં single inheritance જ છે.
Polymorphism: એક call, many behaviours: p.describe() differently act કરે છે p actually શેના તરફ point કરે છે તેના પર depend કરીને. આ lesson નો બાકીનો ભાગ એને unpack કરે છે.
Practical
એક family, એક call, બે behaviours
class Person {
String name;
void describe() {
System.out.println("Person: " + name);
}
}
class Member extends Person {
int booksIssued;
@Override
void describe() { // same signature: OVERRIDING
System.out.println("Member " + name + " has " + booksIssued + " book(s)");
}
}
public class BookBridge {
public static void main(String[] args) {
Person p = new Member(); // a Member IS a Person
p.name = "Riya";
p.describe(); // કઈ version run થાય છે?
}
}
Quiz
ઉપરના listing માં, p ને Person તરીકે declare કરવામાં આવ્યું છે પણ નવું Member() hold કરે છે. p.describe() શું print કરે છે?
- Person: Riya
- Member Riya has 0 book(s)
- Compile error: Person reference overridden method ને call નથી કરી શકતો
- બંને lines, parent first then child
Show the answer
Member Riya has 0 book(s)
Java run time પર object ની REAL type ને જુએ છે, reference ની declared type નહીં: object એ Member છે, એટલે Member ની describe() run થાય છે, booksIssued સાથે તેના default 0 પર. આ dynamic method dispatch છે, polymorphism નું machinery. Option A એ જે students answer કરે છે જે think કરે છે કે reference type decide કરે છે, exact misconception જેને આ question target કરે છે. overriding વિશે કંઈ compile error નથી, અને Java ક્યારેય બંને versions ને run નથી કરતી જ્યાં સુધી child explicitly ન માંગે (next lesson નું super).
At a glance
Overloading vs overriding (confusion pair)
| Aspect | Overloading | Overriding |
|---|---|---|
| ક્યાં | Same class | Parent અને child class |
| Signature | Same name, DIFFERENT parameters | Same name, SAME parameters |
| Decided | Compile time પર | Run time પર (dynamic dispatch) |
| Purpose | એક action ની convenient variants | Child inherited behaviour ને replace કરે છે |
Think first
mechanism ને name આપો
class Librarian ની અંદર: issueBook(String title) અને issueBook(String title, int days). Overloading અથવા overriding? tap કરતા પહેલા decide કરો.
Show the answer
Overloading. Same class, same name, different parameter lists (એક extra int લે છે), એટલે compiler દરેક call site પર arguments થી right one ને pick કરે છે, compile time પર. Overriding ને parent class ની જરૂર હોય જેની issueBook(String) ને Librarian identical signature સાથે redefine કરે. Exams માં apply કરવા માટે quick test: different parameters = overloading, same signature સાથે family માં different classes = overriding.
Watch out
જ્યાં આ pair marks ખાય છે
Swapped definitions: લખવું "overriding means same class, different parameters" બાકીનું બધું right હોવા છતાં 0 scores કરે છે. એને anchor કરો: overload = more parameter loads; override = child parent પર rides કરે છે.
Signature slips: "overriding" કરતી વખતે parameter list ને change કરો અને તમે silently overloaded થઈ ગયા છો; parent ની version parent references થી હજુ run થાય છે. @Override annotation exactly એ slip ને compiler catch કરવા માટે exist કરે છે: એને use કરો.
Theory
C++ contrast જે examiners ને impress કરે છે
BCA304 ના C++ માં, dynamic dispatch ને virtual keyword ની જરૂર હતી; forget કરો અને parent ની method run થતી હતી. Java માં, દરેક instance method default રીતે virtual છે: overriding just works. એ એક sentence, Java-vs-C++ અથવા polymorphism answer માં dropped, real understanding ને signal કરે છે. તમે અહીં build કરેલી family load-bearing છે: this અને super (next lesson) એને navigate કરે છે, અને interfaces આ unit ના end પર Java ની polymorphism story ને complete કરે છે.
Summary
Key takeaways
- Encapsulation: private fields, public guard methods; inheritance: extends, one parent only; polymorphism: એક call, many forms.
- Overloading: same class, same name, different parameter lists, compile time પર resolved.
- Overriding: child inherited method ને identical signature સાથે redefine કરે છે, run time પર resolved.
- Person p = new Member(); p.describe() Member ની version run કરે છે: object ની type decide કરે છે, reference ની નહીં.
- બધી Java instance methods default રીતે virtual છે; C++ ને virtual keyword ની જરૂર હતી.
- @Override compiler ને genuine override verify કરવા દે છે.
- Memory hook: overload loads add કરે છે, override rides over કરે છે.