AnyCompiler

Polymorphism aur Interfaces

Ek interface un methods ka set define karta hai jo ek class ko implement karna chahiye, jo implements se declare hota hai. extends ke ulat, ek class ek saath multiple interfaces implement kar sakta hai, aur bilkul alag classes — Circle aur Square yahan Shape ke alawa kuch share nahi karte — sab same interface ko satisfy kar sakte hain.

public class Main {
    interface Shape {
        double area();
    }

    static class Circle implements Shape {
        double radius;

        Circle(double radius) {
            this.radius = radius;
        }

        public double area() {
            return 3.14159 * radius * radius;
        }
    }

    static class Square implements Shape {
        double side;

        Square(double side) {
            this.side = side;
        }

        public double area() {
            return side * side;
        }
    }

    public static void main(String[] args) {
        Shape[] shapes = { new Circle(2), new Square(3) };
        for (Shape s : shapes) {
            System.out.println(s.area());
        }
    }
}
Output
12.56636
9.0

shapes, Shape ka ek array hai — interface type — lekin har element phir bhi sahi class ka khud ka area() implementation call karta hai. Yeh dynamic dispatch hai: kaunsa actual method run hota hai yeh runtime par object ki real class ke basis par decide hota hai, variable ke declared type ke basis par nahi.

Aage: abstract classes — ek regular class aur interface ke beech ka hybrid, ek contract aur real implementation code dono share karne ke liye.

Practice exercise

Ek interface Named define karo jiska ek method name() ho. Ek class Dog define karo jo Named ko implement kare, jiska ek field dogName ho aur ek name() method jo dogName return kare. Ek method greet(Named n) likho jo "Hello, " + n.name() print kare. greet ko ek naye Dog ke sath call karo jiska dogName "Rex" ho.