AnyCompiler

Inheritance

Ek class extends se doosri class se inherit kar sakta hai, automatically uske fields aur methods tak access milte hue. Subclass ke constructor ke andar super(name), parent class ke constructor ko call karta hai, jo zaroori hai subclass constructor ke kuch aur karne se pehle jab parent ke paas koi no-argument constructor na ho.

@Override se Overriding

Ek method ko @Override mark karna compiler ko batata hai ki aap parent class ke version ko replace karna chahte ho — yeh optional hai, lekin yeh real mistakes pakadta hai, jaise ek typo'd method naam jo warna chupke se ek bilkul naya method define kar deta jo woh override karna chahiye tha uski jagah. dog.speak() Dog ka khud ka version call karta hai, Animal ka nahi, kyunki Dog use override karta hai.

public class Main {
    static class Animal {
        String name;

        Animal(String name) {
            this.name = name;
        }

        String speak() {
            return name + " makes a sound";
        }
    }

    static class Dog extends Animal {
        Dog(String name) {
            super(name);
        }

        @Override
        String speak() {
            return name + " barks";
        }
    }

    public static void main(String[] args) {
        Dog dog = new Dog("Rex");
        System.out.println(dog.speak());
    }
}
Output
Rex barks

Aage: polymorphism aur interfaces — Java ka first-class tarika alag alag classes mein shared behavior describe karne ka.

Practice exercise

Ek class Animal define karo jiska ek field name ho aur ek method speak() ho jo name + " makes a sound" return kare. Ek class Cat define karo jo Animal se extend kare aur speak() ko override karke name + " meows" return kare. "Whiskers" naam ka ek Cat banao aur uska speak() print karo.