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 bar-aks, ek class ek sath 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 chalta 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 darmiyan ka hybrid, ek contract aur real implementation code dono share karne ke liye.

Practice exercise

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