Skip to content

📚 āϜāĻžāĻ­āĻžāϤ⧇ āĻĒāϞāĻŋāĻŽāϰāĻĢāĻŋāϜāĻŽ (Polymorphism in Java): āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āύ⧋āϟÂļ

āĻ­āĻŋāĻĄāĻŋāĻ“ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ: Engineering Digest - Polymorphism: Compile Time vs Run Time


ā§§. āĻĒāϞāĻŋāĻŽāϰāĻĢāĻŋāϜāĻŽ āϕ⧀? (What is Polymorphism?)Âļ

  • āĻļāĻŦā§āĻĻāĻ—āϤ āĻ…āĻ°ā§āĻĨ:
  • Poly = āĻ…āύ⧇āĻ• (Many)
  • Morph = āϰ⧂āĻĒ āĻŦāĻž āφāĻ•ā§ƒāϤāĻŋ (Forms)
  • āĻ…āĻ°ā§āĻĨāĻžā§Ž, Polymorphism āĻļāĻŦā§āĻĻ⧇āϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ⧋ "āĻŦāĻšā§āϰ⧂āĻĒāĻŋāϤāĻž" (Many Forms)āĨ¤

  • āϏāĻ‚āĻœā§āĻžāĻž: āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻ“āϰāĻŋāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡āĻĄ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ā§Ÿā§‡āϰ (OOP) āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ, āϝāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāĻ•āχ āύāĻžāĻŽā§‡āϰ āĻŽā§‡āĻĨāĻĄ āĻ­āĻŋāĻ¨ā§āύ āĻ­āĻŋāĻ¨ā§āύ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻ“āĻĒāϰ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇ āĻ­āĻŋāĻ¨ā§āύ āĻ­āĻŋāĻ¨ā§āύ āφāϚāϰāĻŖ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰ⧇ (Polymorphism allows methods to do different things based on the object it is acting upon, even though the method name and signature might be the same)āĨ¤

  • āĻŽā§‚āϞ āĻĒā§āϰāĻ•āĻžāϰāϭ⧇āĻĻ: āĻĒāϞāĻŋāĻŽāϰāĻĢāĻŋāϜāĻŽ āĻĒā§āϰāϧāĻžāύāϤ āĻĻ⧁āχ āĻĒā§āϰāĻ•āĻžāϰ:
  • Compile Time Polymorphism (āĻ•āĻŽā§āĻĒāĻžāχāϞ-āϟāĻžāχāĻŽ āĻĒāϞāĻŋāĻŽāϰāĻĢāĻŋāϜāĻŽ)
  • Run Time Polymorphism (āϰāĻžāύ-āϟāĻžāχāĻŽ āĻĒāϞāĻŋāĻŽāϰāĻĢāĻŋāϜāĻŽ)

⧍. āĻ•āĻŽā§āĻĒāĻžāχāϞ āϟāĻžāχāĻŽ āĻĒāϞāĻŋāĻŽāϰāĻĢāĻŋāϜāĻŽ (Compile Time Polymorphism)Âļ

  • āĻ…āĻ¨ā§āϝ āύāĻžāĻŽ: āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ• āĻĒāϞāĻŋāĻŽāϰāĻĢāĻŋāϜāĻŽ (Static Polymorphism) āĻŦāĻž āφāĻ°ā§āϞāĻŋ āĻŦāĻžāχāĻ¨ā§āĻĄāĻŋāĻ‚ (Early Binding)āĨ¤
  • āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžā§ŸāĻŋāϤ āĻšā§Ÿ: Method Overloading-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžā§ŸāĻŋāϤ āĻšā§ŸāĨ¤
  • āϕ⧇āύ āĻ•āĻŽā§āĻĒāĻžāχāϞ-āϟāĻžāχāĻŽ āĻŦāϞāĻž āĻšā§Ÿ? āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§‡āϰ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻžāϰ āϏāĻŽā§Ÿāχ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϏāĻ‚āĻ–ā§āϝāĻž, āĻĄā§‡āϟāĻž āϟāĻžāχāĻĒ āĻŦāĻž āϏāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¨ā§āϏ āĻĻ⧇āϖ⧇ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āĻ¨ā§‡ā§Ÿ āϝ⧇ āϕ⧋āύ āĻŽā§‡āĻĨāĻĄāϟāĻŋ āĻ•āϞ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤
  • āϕ⧋āĻĄ āωāĻĻāĻžāĻšāϰāĻŖ (Calculator Class):
    class Calculator {
        // āĻĻ⧁āϟāĻŋ int āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻŽā§‡āĻĨāĻĄ
        public int add(int a, int b) {
            return a + b;
        }
    
        // āϤāĻŋāύāϟāĻŋ int āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻŽā§‡āĻĨāĻĄ (āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϏāĻ‚āĻ–ā§āϝāĻž āĻ­āĻŋāĻ¨ā§āύ)
        public int add(int a, int b, int c) {
            return a + b + c;
        }
    
        // āĻĻ⧁āϟāĻŋ double āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻŽā§‡āĻĨāĻĄ (āĻĄā§‡āϟāĻž āϟāĻžāχāĻĒ āĻ­āĻŋāĻ¨ā§āύ)
        public double add(double a, double b) {
            return a + b;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Calculator calc = new Calculator();
            System.out.println(calc.add(5, 10));        // Output: 15 (āĻĒā§āϰāĻĨāĻŽ add āĻ•āϞ āĻšāĻŦ⧇)
            System.out.println(calc.add(5, 10, 15));    // Output: 30 (āĻĻā§āĻŦāĻŋāĻ¤ā§€ā§Ÿ add āĻ•āϞ āĻšāĻŦ⧇)
            System.out.println(calc.add(5.5, 10.5));    // Output: 16.0 (āϤ⧃āĻ¤ā§€ā§Ÿ add āĻ•āϞ āĻšāĻŦ⧇)
        }
    }
    

āĻāĻ–āĻžāύ⧇ add() āĻŽā§‡āĻĨāĻĄā§‡āϰ āύāĻžāĻŽ āĻāĻ•āχ āĻšāϞ⧇āĻ“ āϤāĻžāϰ āĻ­āĻŋāĻ¨ā§āύ āĻ­āĻŋāĻ¨ā§āύ āĻĢāĻ°ā§āĻŽ (āĻŦāĻšā§āϰ⧂āĻĒāĻŋāϤāĻž) āĻ°ā§Ÿā§‡āϛ⧇ āϝāĻž āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āĻ•āĻŽā§āĻĒāĻžāχāϞ āϟāĻžāχāĻŽā§‡ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧇āĨ¤


ā§Š. āϰāĻžāύ āϟāĻžāχāĻŽ āĻĒāϞāĻŋāĻŽāϰāĻĢāĻŋāϜāĻŽ (Run Time Polymorphism)Âļ

  • āĻ…āĻ¨ā§āϝ āύāĻžāĻŽ: āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ• āĻĒāϞāĻŋāĻŽāϰāĻĢāĻŋāϜāĻŽ (Dynamic Polymorphism) āĻŦāĻž āϞ⧇āϟ āĻŦāĻžāχāĻ¨ā§āĻĄāĻŋāĻ‚ (Late Binding)āĨ¤
  • āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžā§ŸāĻŋāϤ āĻšā§Ÿ: Inheritance (āωāĻ¤ā§āϤāϰāĻžāϧāĻŋāĻ•āĻžāϰ) āĻāĻŦāĻ‚ Method Overriding-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡āĨ¤
  • Method Overriding āϕ⧀? āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻ•ā§āϞāĻžāϏ⧇āϰ āϕ⧋āύ⧋ āĻŽā§‡āĻĨāĻĄāϕ⧇ āϝāĻĻāĻŋ āϚāĻžāχāĻ˛ā§āĻĄ āĻ•ā§āϞāĻžāϏ⧇ āĻāϏ⧇ āĻĒ⧁āύāϰāĻžā§Ÿ āύāĻŋāϜāĻ¸ā§āĻŦ āϞāϜāĻŋāĻ• āĻĻāĻŋā§Ÿā§‡ āϏāĻ‚āĻœā§āĻžāĻžā§ŸāĻŋāϤ (override) āĻ•āϰāĻž āĻšā§Ÿ, āϤāĻŦ⧇ āϤāĻžāϕ⧇ āĻŽā§‡āĻĨāĻĄ āĻ“āĻ­āĻžāϰāϰāĻžāχāĻĄāĻŋāĻ‚ āĻŦāϞ⧇āĨ¤
  • āϕ⧋āĻĄ āωāĻĻāĻžāĻšāϰāĻŖ (Animal, Dog, Cat):
    // āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻ•ā§āϞāĻžāϏ
    class Animal {
        public void sayHello() {
            System.out.println("...");
        }
    }
    
    // āϚāĻžāχāĻ˛ā§āĻĄ āĻ•ā§āϞāĻžāϏ ā§§
    class Dog extends Animal {
        @Override
        public void sayHello() {
            System.out.println("Woof");
        }
    }
    
    // āϚāĻžāχāĻ˛ā§āĻĄ āĻ•ā§āϞāĻžāϏ ⧍
    class Cat extends Animal {
        @Override
        public void sayHello() {
            System.out.println("Meow");
        }
    }
    

ā§Ē. āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻāĻŦāĻ‚ āϚāĻžāχāĻ˛ā§āĻĄ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ (Parent Reference to Child Object)Âļ

āϜāĻžāĻ­āĻžāϤ⧇ āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻ•ā§āϞāĻžāϏ⧇āϰ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ⧇āϰ āϭ⧇āϤāϰ āϚāĻžāχāĻ˛ā§āĻĄ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻāϏāĻžāχāύ āĻ•āϰāĻž āϝāĻžā§Ÿ:

Animal dog = new Dog();
Animal cat = new Cat();

dog.sayHello(); // Output: Woof
cat.sayHello(); // Output: Meow

āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āύāĻŋ⧟āĻŽāĻžāĻŦāϞ⧀:Âļ

  1. āĻŦ⧈āϧ: āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ⧇ āϚāĻžāχāĻ˛ā§āĻĄ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϰāĻžāĻ–āĻž āϝāĻžā§Ÿ (Animal dog = new Dog();)āĨ¤
  2. āĻ…āĻŦ⧈āϧ (āωāĻ˛ā§āĻŸā§‹āϟāĻž āϏāĻŽā§āĻ­āĻŦ āύ⧟): āϚāĻžāχāĻ˛ā§āĻĄ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ⧇ āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϏāϰāĻžāϏāϰāĻŋ āϰāĻžāĻ–āĻž āϝāĻžā§Ÿ āύāĻž (Dog dog = new Animal(); ❌ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻāϰāϰ āĻĻ⧇āĻŦ⧇)āĨ¤
  3. āĻ…āĻŦ⧈āϧ (āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻšā§€āύ āĻ•ā§āϞāĻžāϏ): āχāύāĻšā§‡āϰāĻŋāĻŸā§‡āĻ¨ā§āϏ āϏāĻŽā§āĻĒāĻ°ā§āĻ• āύ⧇āχ āĻāĻŽāύ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ⧇ āϰāĻžāĻ–āĻž āϝāĻžā§Ÿ āύāĻž (Animal dog = new Student(); ❌ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻāϰāϰ āĻĻ⧇āĻŦ⧇)āĨ¤

ā§Ģ. āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ• āĻŽā§‡āĻĨāĻĄ āĻĄāĻŋāϏāĻĒā§āϝāĻžāϚ (Dynamic Method Dispatch)Âļ

  • āϕ⧇āύ āϰāĻžāύ-āϟāĻžāχāĻŽ āĻĒāϞāĻŋāĻŽāϰāĻĢāĻŋāϜāĻŽ āĻŦāϞāĻž āĻšā§Ÿ?
  • Animal dog = new Dog(); āϞ⧇āĻ–āĻžāϰ āϏāĻŽā§Ÿ new āĻ•āĻŋ-āĻ“ā§ŸāĻžāĻ°ā§āĻĄā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϰāĻžāύ-āϟāĻžāχāĻŽā§‡ āĻŽā§‡āĻŽā§‹āϰāĻŋ āĻ…ā§āϝāĻžāϞ⧋āϕ⧇āϟ āĻšā§Ÿ āĻāĻŦāĻ‚ āĻšāĻŋāĻĒ āĻŽā§‡āĻŽā§‹āϰāĻŋāϤ⧇ āĻĒā§āϰāĻ•ā§ƒāϤ Dog āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻšā§ŸāĨ¤
  • āϝāĻ–āύ dog.sayHello() āĻ•āϞ āĻ•āϰāĻž āĻšā§Ÿ, āϤāĻ–āύ āϜāĻžāĻ­āĻž āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻŽā§‡āĻļāĻŋāύ (JVM) āϰāĻžāύ-āϟāĻžāχāĻŽā§‡ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰ⧇ āϝ⧇ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏāϟāĻŋ Animal-āĻāϰ āĻšāϞ⧇āĻ“ āĻŽā§‡āĻŽā§‹āϰāĻŋāϤ⧇ āφāϏāϞ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϟāĻŋ Dog-āĻāϰāĨ¤ āĻĢāϞ⧇ JVM āĻ¸ā§āĻŦ⧟āĻ‚āĻ•ā§āϰāĻŋ⧟āĻ­āĻžāĻŦ⧇ Dog āĻ•ā§āϞāĻžāϏ⧇āϰ āĻ“āĻ­āĻžāϰāϰāĻžāχāĻĄā§‡āĻĄ āĻŽā§‡āĻĨāĻĄāϟāĻŋ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāϟ āĻ•āϰ⧇āĨ¤

  • Dynamic Method Dispatch: āϰāĻžāύ-āϟāĻžāχāĻŽā§‡ āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ•āĻžāϞāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻž āĻšā§Ÿ āϝ⧇ āϕ⧋āύ āĻŽā§‡āĻĨāĻĄāϟāĻŋ āϚāϞāĻŦā§‡â€”āĻāχ āĻĒ⧁āϰ⧋ āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽāϕ⧇ Dynamic Method Dispatch āĻŦāϞāĻž āĻšāϝāĻŧāĨ¤


ā§Ŧ. āφāĻĒāĻ•āĻžāĻ¸ā§āϟāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻĄāĻžāωāύāĻ•āĻžāĻ¸ā§āϟāĻŋāĻ‚ (Upcasting & Downcasting)Âļ

āĻ•. āφāĻĒāĻ•āĻžāĻ¸ā§āϟāĻŋāĻ‚ (Upcasting):Âļ

  • āϚāĻžāχāĻ˛ā§āĻĄ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϕ⧇ āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻ•ā§āϞāĻžāϏ⧇āϰ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ⧇ āϰāĻžāĻ–āĻž (āϞ⧋āϝāĻŧāĻžāϰ āĻšāĻžāϝāĻŧāĻžāϰāĻžāĻ°ā§āĻ•āĻŋ āĻĨ⧇āϕ⧇ āφāĻĒāĻžāϰ āĻšāĻžāϝāĻŧāĻžāϰāĻžāĻ°ā§āĻ•āĻŋāϤ⧇ āϝāĻžāĻ“ā§ŸāĻž)āĨ¤
  • āĻāϟāĻŋ āϜāĻžāĻ­āĻžāϤ⧇ āĻ¸ā§āĻŦ⧟āĻ‚āĻ•ā§āϰāĻŋ⧟āĻ­āĻžāĻŦ⧇ (Implicitly) āϘāĻŸā§‡āĨ¤
    Animal dog = new Dog(); // Upcasting
    

āĻ–. āĻĄāĻžāωāύāĻ•āĻžāĻ¸ā§āϟāĻŋāĻ‚ (Downcasting):Âļ

  • āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻ•ā§āϞāĻžāϏ⧇āϰ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ⧇ āĻĨāĻžāĻ•āĻž āϚāĻžāχāĻ˛ā§āĻĄ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϕ⧇ āĻĒ⧁āύāϰāĻžā§Ÿ āϚāĻžāχāĻ˛ā§āĻĄ āĻ•ā§āϞāĻžāϏ⧇āϰ āύāĻŋāϜāĻ¸ā§āĻŦ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ⧇ āĻ•āύāĻ­āĻžāĻ°ā§āϟ āĻ•āϰāĻžāĨ¤
  • āĻāϟāĻŋ āĻāĻ•ā§āϏāĻĒā§āϞāĻŋāϏāĻŋāϟāϞāĻŋ (Explicitly) āϟāĻžāχāĻĒāĻ•āĻžāĻ¸ā§āϟ āĻ•āϰāϤ⧇ āĻšā§Ÿ (āϝ⧇āĻŽāύ āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­ āϟāĻžāχāĻĒ⧇ double āĻĨ⧇āϕ⧇ int-āĻ āĻ•āĻžāĻ¸ā§āϟ āĻ•āϰāĻžāϰ āĻŽāϤ⧋)āĨ¤
    Animal animalRef = new Dog();       // Upcasting
    Dog myDog = (Dog) animalRef;        // Downcasting (Explicitly)
    

ā§­. āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āϟāĻžāχāĻĒ⧇āϰ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž (Crucial Rule: What Can Be Accessed?)Âļ

  • āĻĒā§āϰāĻļā§āύ: Dog āĻ•ā§āϞāĻžāϏ⧇ āϝāĻĻāĻŋ āύāĻŋāϜāĻ¸ā§āĻŦ āϕ⧋āύ⧋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻŽā§‡āĻĨāĻĄ āĻĨāĻžāϕ⧇ (āϝ⧇āĻŽāύ sayBye()), āϝāĻž Animal āĻ•ā§āϞāĻžāϏ⧇ āύ⧇āĻ‡â€”āϤāĻžāĻšāϞ⧇ āĻ•āĻŋ Animal dog = new Dog(); āĻĻāĻŋā§Ÿā§‡ dog.sayBye() āĻ•āϞ āĻ•āϰāĻž āϝāĻžāĻŦ⧇?

    class Dog extends Animal {
        public void sayBye() {
            System.out.println("Woof woof");
        }
    }
    
    // āĻŸā§‡āĻ¸ā§āϟ āĻ•ā§āϞāĻžāϏ⧇:
    Animal bob = new Dog();
    bob.sayBye(); // ❌ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻāϰāϰ āĻĻ⧇āĻŦ⧇!
    

  • āĻ•āĻžāϰāĻŖ:

  • āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āϏāĻŦāϏāĻŽā§Ÿ āĻŽā§‡āĻĨāĻĄ āĻ•āϞ⧇āϰ āĻŦ⧈āϧāϤāĻž āϝāĻžāϚāĻžāχ āĻ•āϰ⧇ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āϟāĻžāχāĻĒ (Animal) āĻĻ⧇āϖ⧇, āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϟāĻžāχāĻĒ āĻĻ⧇āϖ⧇ āύ⧟āĨ¤
  • āϝ⧇āĻšā§‡āϤ⧁ Animal āĻ•ā§āϞāĻžāϏ⧇āϰ āĻŽāĻ§ā§āϝ⧇ sayBye() āύāĻžāĻŽā§‡āϰ āϕ⧋āύ⧋ āĻŽā§‡āĻĨāĻĄ āύ⧇āχ, āϤāĻžāχ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ āĻāϟāĻŋ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āĻĻā§‡ā§Ÿ āύāĻžāĨ¤

  • āϏāĻŽāĻžāϧāĻžāύ: āϚāĻžāχāĻ˛ā§āĻĄ āĻ•ā§āϞāĻžāϏ⧇āϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻ¸ā§āĻĒ⧇āϏāĻŋāĻĢāĻŋāĻ• āĻŽā§‡āĻĨāĻĄ āĻ•āϞ āĻ•āϰāϤ⧇ āĻšāϞ⧇ āĻšā§Ÿ āϏāϰāĻžāϏāϰāĻŋ āϚāĻžāχāĻ˛ā§āĻĄ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ (Dog bob = new Dog();), āĻ…āĻĨāĻŦāĻž āĻĄāĻžāωāύāĻ•āĻžāĻ¸ā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ (((Dog) bob).sayBye();)āĨ¤


📌 āϏāĻžāϰāϏāĻ‚āĻ•ā§āώ⧇āĻĒ (Summary Table)Âļ

āĻŦāĻŋāώ⧟ Compile Time Polymorphism Run Time Polymorphism
āĻ…āĻ¨ā§āϝ āύāĻžāĻŽ Method Overloading / Static Binding Method Overriding / Dynamic Method Dispatch
āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āĻ•āĻ–āύ āĻšā§Ÿ? āϕ⧋āĻĄ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻžāϰ āϏāĻŽā§Ÿ āϕ⧋āĻĄ āϰāĻžāύ āĻ•āϰāĻžāϰ āϏāĻŽā§Ÿ (JVM āĻĻā§āĻŦāĻžāϰāĻž)
āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžā§Ÿāύ⧇āϰ āωāĻĒāĻžā§Ÿ āĻāĻ•āχ āĻ•ā§āϞāĻžāϏ⧇ āĻŽā§‡āĻĨāĻĄā§‡āϰ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āχāύāĻšā§‡āϰāĻŋāĻŸā§‡āĻ¨ā§āϏ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāĻžāĻŦāĻ•ā§āϞāĻžāϏ⧇ āĻŽā§‡āĻĨāĻĄ āĻ“āĻ­āĻžāϰāϰāĻžāχāĻĄ āĻ•āϰ⧇
āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ⧇āϰ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž āĻ•āϞ āĻ•āϰāĻžāϰ āĻŽā§‡āĻĨāĻĄā§‡āϰ āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰ āĻšā§‡āĻ• āĻ•āϰ⧇ āĻŽā§‡āĻĨāĻĄ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ⧇āϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻā§‡ā§Ÿ, āϤāĻŦ⧇ āϰāĻžāύāϟāĻžāχāĻŽā§‡ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻ“āĻ­āĻžāϰāϰāĻžāχāĻĄā§‡āĻĄ āĻ­āĻžāĻ°ā§āϏāύ āϚāϞ⧇
āĻ•āĻžāĻ¸ā§āϟāĻŋāĻ‚ āĻĒā§āϰāϝ⧋āĻœā§āϝ āύ⧟ āφāĻĒāĻ•āĻžāĻ¸ā§āϟāĻŋāĻ‚ (Implicit) āĻāĻŦāĻ‚ āĻĄāĻžāωāύāĻ•āĻžāĻ¸ā§āϟāĻŋāĻ‚ (Explicit)