Inheritance and Polymorphism in Java: data encapsulation, overriding and overloading methods

extends Person family ને build કરે છે, encapsulation તેના data ને guard કરે છે, અને exam નો favourite confusion pair settle થાય છે: overloading એ same name different parameters છે, overriding એ child parent ની method ને replace કરે છે.

12 min read · 9 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


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 કરે છે?

  1. Person: Riya
  2. Member Riya has 0 book(s)
  3. Compile error: Person reference overridden method ને call નથી કરી શકતો
  4. બંને 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)

AspectOverloadingOverriding
ક્યાંSame classParent અને child class
SignatureSame name, DIFFERENT parametersSame name, SAME parameters
DecidedCompile time પરRun time પર (dynamic dispatch)
Purposeએક action ની convenient variantsChild 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 કરે છે.

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Classes and Objects

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati