مرکزی مواد پر جائیں
ماڈیول 3 · سبق 1 از 2کورس میں 5/14~12 min
ماڈیول اسباق (1/2)

وراثت

وراثت OOP کا ایک بنیادی طریقہ کار ہے جو ایک کلاس (جسے چائلڈ کلاس یا ذیلی کلاس کہا جاتا ہے) کو کسی اور کلاس (جسے پیرنٹ کلاس یا سپر کلاس کہا جاتا ہے) سے فیلڈز اور طریقوں کو وراثت میں لینے کی اجازت دیتا ہے۔

یہ کوڈ کے دوبارہ استعمال کو فروغ دیتا ہے اور غیر ضروری تکرار سے بچتا ہے۔

extends کے ساتھ کلاس بڑھانا

جاوا میں، ہم یہ بتانے کے لیے extends کلیدی لفظ استعمال کرتے ہیں کہ ایک کلاس دوسرے سے وراثت میں ملتی ہے:

Java
class Vehicle {
    protected int speed; // 'protected' makes the field visible to subclasses

    public void honk() {
        System.out.println("Beep beep!");
    }
}

class Car extends Vehicle {
    // Car automatically inherits the speed field and the honk() method
}

کنسٹرکٹر اور super() کلیدی لفظ

اگر سپر کلاس میں ایک کنسٹرکٹر ہے جو پیرامیٹرز کو قبول کرتا ہے، تو ذیلی کلاس کو اپنے کنسٹرکٹر میں super(...) کو پہلے بیان کے طور پر استعمال کرتے ہوئے اسے واضح طور پر کال کرنا چاہیے۔

Java
class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }
}

class Student extends Person {
    int studentId;

    public Student(String name, int studentId) {
        super(name); // Invokes the constructor of Person
        this.studentId = studentId;
    }
}

طریقہ اوور رائیڈنگ (@Override)

ایک ذیلی طبقہ سپر کلاس سے وراثت میں ملنے والے طریقہ کے لیے اپنا مخصوص نفاذ فراہم کر سکتا ہے۔ اس آپریشن کو اوور رائیڈنگ (طریقہ اوور رائیڈنگ) کہا جاتا ہے اور اس کی نشاندہی @Override تشریح سے ہوتی ہے۔

Java
class Animal {
    public void makeSound() {
        System.out.println("Rumore generico");
    }
}

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Miao!");
    }
}

protected ترمیم کنندہ

protected رسائی موڈیفائر وراثت میں کلیدی کردار ادا کرتا ہے۔ private کے برعکس، جو اراکین کو صرف ایک ہی کلاس میں مرئی بناتا ہے، protected فیلڈز اور طریقوں تک رسائی کی اجازت دیتا ہے دونوں ایک ہی پیکیج کے اندر اور تمام ذیلی طبقات کے ذریعے، چاہے وہ مختلف پیکجوں میں ہی کیوں نہ ہوں۔

super کے ساتھ والدین کے اراکین تک رسائی حاصل کرنا

سپرکلاس کنسٹرکٹر کو کال کرنے کے علاوہ، super کلیدی لفظ کو ذیلی طبقے کے طریقوں یا پیرنٹ کلاس کے متغیرات کا حوالہ دینے کے لیے استعمال کیا جا سکتا ہے۔ یہ خاص طور پر مفید ہے جب کوئی طریقہ اوور رائڈ ہو، لیکن آپ پھر بھی اصل والدین کے رویے کو استعمال کرنا چاہتے ہیں:

Java
class Animal {
    public void sleep() {
        System.out.println("Zzz");
    }
}

class Cat extends Animal {
    @Override
    public void sleep() {
        super.sleep(); // Executes the behavior of Animal
        System.out.println("The cat purrs while sleeping.");
    }
}

جاوا میں سنگل وراثت

جاوا میں، ایک کلاس صرف ایک کلاس (واحد وراثت) کو بڑھا سکتی ہے۔ متعدد طبقات سے براہ راست وراثت (متعدد وراثت) کی اجازت نہیں ہے۔ مثال کے طور پر، class Cat extends Animal, Mammal ایک تالیف کی خرابی کا سبب بنے گا۔ یہ ڈیزائن انتخاب ابہام سے بچتا ہے جسے "ہیرے کا مسئلہ" کہا جاتا ہے (جب دو سپر کلاسز مختلف نفاذ کے ساتھ ایک ہی طریقہ کی وضاحت کرتے ہیں)۔ اس حد کو دور کرنے کے لیے، جاوا نے انٹرفیس کا تصور متعارف کرایا ہے، جسے ہم اگلے ماڈیول میں دریافت کریں گے۔


خود ہی آزمائیں۔

ورزش#java.m3.l1.e1
کوششیں: 0لوڈ ہو رہا ہے…

جانوروں کو بڑھا کر کتے کے ذیلی طبقے کو مکمل کریں۔ ڈاگ کنسٹرکٹر کا اعلان کریں جو ایک نام (سٹرنگ) کو قبول کرتا ہے اور اسے اینیمل کنسٹرکٹر کو منتقل کرنے کے لیے سپر (نام) کا استعمال کرتا ہے۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

لکھیں `پبلک ڈاگ (سٹرنگ کا نام) { سپر (نام)؛ }` ڈاگ کلاس کے اندر۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#java.m3.l1.e2
کوششیں: 0لوڈ ہو رہا ہے…

Dog کو Animal سے بڑھا دیں اور makeSound() طریقہ کو اوور رائڈ کریں تاکہ یہ Generic Sound کے بجائے سٹرنگ Woof کو واپس کرے۔ @Override تشریح استعمال کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

اعلان کے اوپر `@Override` لکھیں `public String makeSound() { واپس 'Woof'؛ }` کتے کے اندر۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#java.m3.l1.e3
کوششیں: 0لوڈ ہو رہا ہے…

ایک کیٹ کلاس کا اعلان کریں جو Animal کو بڑھاتا ہے اور سٹرنگ Meow کو واپس کرنے کے لیے makeSound() طریقہ کو اوور رائیڈ کرتا ہے۔ اینیمل کلاس میں پہلے سے ہی ایک کنسٹرکٹر موجود ہے جو نام قبول کرتا ہے۔ یقینی بنائیں کہ کیٹ کنسٹرکٹر بھی ایک نام کو قبول کرتا ہے اور اسے صحیح طریقے سے سپر کلاس کنسٹرکٹر کو دیتا ہے۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

'جانور' کو پھیلانے والی 'Cat' کلاس بنائیں۔ کنسٹرکٹر کا اعلان کریں عوامی کیٹ (سٹرنگ کا نام) { سپر (نام)؛ }` اور `Meow' واپس کرنے کے لئے `@Override` کا استعمال کرتے ہوئے `makeSound()` طریقہ کو اوور رائیڈ کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔