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

extends Person family बनाता है, 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, और Déjà Vu

अब BookBridge को people चाहिए, सिर्फ़ books नहीं। एक Member के पास एक name, एक ID, borrowed books हैं। एक Librarian के पास एक name, एक ID, एक staff code है।

आप 2 classes लिखना शुरू करते हैं और Semester 3 déjà vu feel करते हैं: same name field, same ID logic, दो बार copy की गई। BCA304 में आपने C++ में inheritance से exactly यह smell solve किया।

Java का version एक keyword है: class Member extends Person। और family के ऊपर, Java अपना best trick बनाता है: 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 इसके अपने। ज़्यादा से ज़्यादा एक parent: Java classes के पास सिर्फ़ single inheritance है।

Polymorphism: एक call, कई behaviours: p.describe() अलग तरीके से act करता है इस पर depend करते हुए कि p असल में किसकी तरफ़ point करता है। इस 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();              // whose version runs?
    }
}

Quiz

ऊपर की listing में, p Person की तरह declared है पर एक new 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 फिर 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 जो सोचते हैं reference type decide करता है वे answer देंगे, exactly वह misconception जिसे यह question target करता है। Overriding के बारे में कुछ भी compile error नहीं है, और Java कभी दोनों versions run नहीं करता जब तक child explicitly न पूछे (अगले lesson का super)।

At a glance

Overloading बनाम 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 का नाम बताइए

class Librarian के अंदर: issueBook(String title) और issueBook(String title, int days)। Overloading या overriding? Tap करने से पहले decide कीजिए।

Show the answer

Overloading। Same class, same name, अलग parameter lists (एक extra int लेता है), तो compiler हर call site पर arguments से सही एक pick करता है, compile time पर। Overriding को एक parent class चाहिए होगा जिसका issueBook(String) Librarian identical signature से redefine करता है। Exams में apply करने के लिए quick test: different parameters = overloading, एक family में same signature वाली अलग classes = overriding।

Watch out

जहाँ यह Pair Marks खाता है

Swapped Definitions: "overriding का मतलब है same class, different parameters" लिखना 0 score करता है भले ही बाकी सब सही हो। Anchor कीजिए: overload = ज़्यादा parameter loads; override = child parent के ऊपर ride करता है।

Signature Slips: "overriding" करते हुए parameter list बदलिए और आपने silently overload कर दिया है instead; parent's version अभी भी parent references से run होता है। @Override annotation exactly इसीलिए exist करता है ताकि compiler उस slip को catch करे: इसे इस्तेमाल कीजिए।

Theory

वह C++ Contrast जो Examiners को Impress करता है

BCA304 के C++ में, dynamic dispatch को virtual keyword चाहिए था; भूल जाइए और parent's method run होता। Java में, हर instance method default से virtual होता है: overriding बस काम करता है। वह एक sentence, एक Java-बनाम-C++ या polymorphism answer में drop किया गया, real understanding signal करता है। यहाँ आपने जो family बनाई वह load-bearing है: this और super (अगला lesson) इसे navigate करते हैं, और interfaces इस unit के अंत में Java की polymorphism story पूरी करते हैं।

Summary

Key takeaways

  • Encapsulation: private fields, public guard methods; inheritance: extends, सिर्फ़ एक parent; polymorphism: एक call, कई forms।
  • Overloading: same class, same name, अलग 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 ऊपर ride करता है।

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

Inheritance and Polymorphism in Java: data encapsulation, overriding and overloading methods · Java Programming Language · Gri-Learn