CodeGym /جاوا بلاگ /Random-SD /جاوا ۾ وراثت
John Squirrels
سطح
San Francisco

جاوا ۾ وراثت

گروپ ۾ شايع ٿيل
جاوا هڪ اعتراض تي مبني ٻولي آهي. هن جو مطلب اهو آهي ته جاوا ۾ هر شيءَ طبقن ۽ انهن جي شين تي مشتمل آهي، ۽ او او پي (آبجڪٽ تي مبني پروگرامنگ) جي پيراڊمز جي تابعداري ڪري ٿي. هڪ اهڙو نمونو وراثت آهي، جاوا ۾ هڪ ميکانيزم جنهن جي ذريعي هڪ طبقي کي اجازت ڏني وئي آهي ته هو ٻئي طبقي جي خاصيتن (فيلڊز ۽ طريقن) کي ورثي ۾. سادي لفظ ۾، جاوا ۾، وراثت جو مطلب آهي نوان طبقن ٺاهڻ جو بنياد موجود آهن. جاوا ۾ وراثت - 1

جاوا ۾ وراثت جا اهم اداڪار

  • وراثت اهو تصور آهي ته هڪ طبقو جزوي يا مڪمل طور تي پنهنجي والدين جي ملڪيتن ۽ طريقن کي ورجائي سگهي ٿو (جنهن کان اهو وراثت ۾ آهي).
  • ٻار طبقو، يا ذيلي ڪلاس، يا وڌايل طبقو، يا نڪتل طبقو ھڪڙو طبقو آھي جيڪو ٻئي طبقي مان ورثي ۾ ملي ٿو.
  • والدين ڪلاس، سپر ڪلاس، يا بنيادي طبقو ھڪڙو طبقو آھي جنھن ۾ ڪيترائي افعال آھن، ۽ اھي فنڪشن ٻئي ڪلاس (ٻارن جي طبقي) طرفان منظور (وراثت ۾) ٿي سگھن ٿا.
  • طريقو اوور رائيڊنگ هڪ نڪتل طبقي جي طريقي جي رويي کي تبديل ڪري رهيو آهي. اهو عام طور تي وڌيڪ مخصوص، سڌريل رويي آهي. جيڪڏهن توهان وارث ۾ هڪ طريقو ختم ڪيو جيڪو اڳ ۾ ئي والدين طبقي ۾ آهي، اهو ترتيب ڏئي ٿو والدين جو طريقو.
  • هڪ طبقو صرف هڪ اباڻي طبقو ٿي سگهي ٿو، پر هر طبقي ۾ ڪيترائي "ٻار" ٿي سگهن ٿا.

اهو ڪيئن ڪم ڪري ٿو

وراثت جي زنجير کي هدايت ڪئي وئي آهي سڀ کان وڌيڪ تجريدي طبقي کان وڌيڪ ڪنڪريٽ تائين. اھو آھي، سپر ڪلاس طبقن جي زنجير ۾ سڀ کان وڌيڪ خلاصو آھي. گهڻو ڪري اهو ظاهر ڪيو ويو آهي خلاصو (بيس ڪلاس جنهن کي لاڳو ڪرڻ جي ضرورت ناهي). سڀ وڌيڪ ڪلاس وڌيڪ مخصوص آهن. مثال طور، اتي ھڪڙو طبقو آھي جنھن کي "Gadget" سڏيو ويندو آھي. اهو ٿي سگهي ٿو هڪ فيلڊ (يا رياست) "وزن" فيلڊ بيٽري جي گنجائش، فيلڊ چارج جي سطح ۽ طريقا (يا رويي) "ڪم" ۽ چارج ڪرڻ. انهي حالت ۾، طريقا خلاص ٿي سگهن ٿا، اهو آهي، انهن وٽ هڪ خاص عمل نه آهي. جڏهن ته اسان اهو نٿا چئي سگهون ته اهو ڪهڙي قسم جو گيجٽ آهي، اهو بلڪل ڪنهن به ريچارج قابل گيجٽ آهي. اچو ته گيجٽ ڪلاس جو هڪ فون ذيلي ڪلاس ٺاهيو. ان کي هاڻي وزن ۽ بيٽري کي ٻيهر بيان ڪرڻ جي ضرورت ناهي، اهو صرف انهن کي خلاصي گيجٽ مان ورثي ۾ ملي ٿو. پر ڪم جي رويي کي واضح ڪرڻ جي ضرورت پوندي. توھان پڻ شامل ڪري سگھو ٿا ٻيا شعبا ”اسڪرين ڊرون“، ڪنيڪٽر، وغيره. توھان ھڪڙو نئون طريقو شامل ڪري سگھو ٿا "اپڊيٽ آپريٽنگ سسٽم". اڳيون، اسان ٻه وڌيڪ طبقا ٺاهي سگهون ٿا ۽ ٻئي فون، Android ۽ آئي فون مان ورثي ۾ ملندا. ٻنهي طبقن جا وارث آهن سڀني شعبن ۽ طريقن جي گيجٽ ۽ اسمارٽ فون جي، ۽ طريقن کي ختم ڪري سگهجي ٿو. فرسٽ ڪلاس کي ”برانڊ جو نالو“ فيلڊ جي ضرورت هوندي آهي، جڏهن ته آئي فون کي ان فيلڊ جي ضرورت نه هوندي آهي، ڇاڪاڻ ته صرف هڪ ڪمپني اهڙا سمارٽ فون ٺاهيندي آهي.
class Gadget {}
}
//subclass of Gadget class
class Phone extends Gadget {}
//subclass of Phone class
class IPhone extends Phone {}
//subclass of Phone class
class AndroidPhone extends Phone {}
هڪ ٻار طبقو والدين طبقي جي سڀني عوامي ۽ محفوظ ميمبرن جو وارث آهي. ان سان ڪو فرق نٿو پوي ته ذيلي ڪلاس ڪهڙي پيڪيج ۾ آهي. جيڪڏهن ٻار ڪلاس ساڳئي پئڪيج ۾ آهي جيئن والدين طبقي جي، اهو پڻ والدين جي پئڪيج-پرائيويٽ ميمبرن کي ورثي ۾ ملندو آهي. توھان استعمال ڪري سگھوٿا وراثت وارا ميمبر جيئن آھن، انھن کي تبديل ڪريو، انھن کي لڪايو، يا نوان ميمبر شامل ڪريو:
  • توھان استعمال ڪري سگھوٿا وراثت وارا شعبا سڌو سنئون جيئن ڪنھن ٻئي فيلڊ.
  • توھان چائلڊ ڪلاس ۾ ھڪڙي فيلڊ جو اعلان ڪري سگھو ٿا جنھن جو نالو ساڳيو آھي جيڪو والدين ڪلاس ۾ آھي. اهو ان کي لڪائي رهيو آهي (تنهنڪري اهو بهتر نه آهي).
  • توھان چائلڊ ڪلاس ۾ نون شعبن جو اعلان ڪري سگھو ٿا (جيڪي والدين طبقي وٽ ناھي).
  • وراثت وارا طريقا سڌو سنئون استعمال ڪري سگھجن ٿا بغير بغير نڪتل طبقي ۾.
  • ان سان گڏ توهان هڪ ذيلي ڪلاس ۾ هڪ نئون مثال جو طريقو لکي سگهو ٿا جنهن ۾ والدين ڪلاس ۾ هڪ طريقي سان ساڳيو دستخط آهي. اهو عمل ان کي ختم ڪري ٿو.
  • توھان ٻارن جي ڪلاس ۾ نون طريقن جو اعلان ڪري سگھو ٿا جيڪي والدين ڪلاس ۾ اعلان نه ڪيا ويا آھن.
  • توھان لکي سگھو ٿا ھڪڙو ذيلي ڪلاس ٺاھيندڙ جيڪو سڏي ٿو سپر ڪلاس ٺاھيندڙ کي يا ته واضح طور تي يا سپر ڪي ورڊ سان.

مثال

اچو ته وزن ۽ ٽريڊ مارڪ جي شعبن سان گڏ هڪ ڪم () طريقي سان هڪ بنيادي ميوزڪ انسٽرومينٽ ڪلاس ٺاهيو. اسان پڻ هڪ تعمير ڪندڙ جي وضاحت ڪريون ٿا.
public class MusicalInstrument {
   int weight;
   String tradeMark;

   public MusicalInstrument(int weight, String tradeMark) {
       this.weight = weight;
       this.tradeMark = tradeMark;
   }

   public void work() {
       System.out.println("the instrument is playing...");
   }
}
اهو مڪمل طور تي واضح ناهي ته اهو ڪهڙي قسم جو موسيقي جو اوزار آهي ۽ ان کي ڪيئن هلائڻو آهي. اچو ته هڪ وڌيڪ مخصوص اوزار ٺاهيو، وائلن. ان ۾ به ساڳيا شعبا هوندا جيئن موسيقي جي اوزار ۾ (انهن کي ڪنسٽرڪٽر ۾ سپر ڪي ورڊ استعمال ڪندي سڏيو ويندو. اسان ڪم جي طريقي کي به اوور رائيڊ ڪري سگھون ٿا ۽ وائلن اسٽرنگ کي اسٽرنگ ذريعي ترتيب ڏيڻ جو طريقو ٺاهي سگهون ٿا.
public class Violin extends MusicalInstrument {
   String master;
   String owner;
   int age;
   boolean isTuned;

   public Violin(int weight, String tradeMark, String master, String owner, int age, boolean isTuned) {
       super(weight, tradeMark);
       this.master = master;
       this.owner = owner;
       this.age = age;
       this.isTuned = isTuned;
   }

   @Override
   public void work() {
       System.out.println("THe violin's playing");

   }

   public void violinTuning () {
     System.out.println("I'm tuning 1st string...");
     System.out.println("I'm tuning 2nd string...");
     System.out.println("I'm tuning 3rd string...");
     System.out.println("I'm tuning 4th string...");
}


}
اچو ته وائلن ڪلاس کي جانچڻ لاءِ هڪ ڊيمو ڪلاس ٺاهيو ۽ ڏسو ته وراثت ڪيئن ڪم ڪري ٿي.
public class InheritDemo {

   public static void main(String[] args) {

       Violin violin = new Violin(1, null, "Amati", "Kremer", 285, false);
       violin.violinTuning();
       violin.work();
   }
}
انهي صورت ۾، پروگرام جي پيداوار هيٺ ڏنل هوندي:
مان پهرين تار کي ٽيون ڪري رهيو آهيان... مان ٻي تار کي ٽيون ڪري رهيو آهيان... مان ٽيون اسٽرنگ کي ٽيون ڪري رهيو آهيان... مان چوٿون اسٽرنگ کي ٽيون ڪري رهيو آهيان... وائلن وڄائي رهيو آهيان
يعني جيڪڏهن ٻاراڻي طبقي ۾ ڪو اوور رائڊ ٿيل طريقو آهي ته پوءِ اباڻي طريقي کي ڪو نه چئبو. ڇا جيڪڏهن اهو اتي نه آهي؟ اهو آهي، وائلن ڪلاس هن طرح ڏسڻ ۾ اچي ٿو:
public class Violin extends MusicalInstrument {
   String master;
   String owner;
   int age;
   boolean isTuned;

   public Violin(int weight, String tradeMark, String master, String owner, int age, boolean isTuned) {
       super(weight, tradeMark);
       this.master = master;
       this.owner = owner;
       this.age = age;
       this.isTuned = isTuned;
   }

  // @Override


 //  }

   public void violinTuning () {
       System.out.println("I'm tuning 1st string...");
       System.out.println("I'm tuning 2nd string...");
       System.out.println("I'm tuning 3rd string...");
       System.out.println("I'm tuning 4th string...");
   }

}
پيداوار آهي:
مان پهرين اسٽرنگ کي ٽيون ڪري رهيو آهيان... مان 2 اسٽرنگ کي ٽيون ڪري رهيو آهيان... مان ٽيون اسٽرنگ کي ٽيون ڪري رهيو آهيان... مان چوٿون اسٽرنگ کي ٽيون ڪري رهيو آهيان... اوزار هلي رهيو آهي...
اهو آهي، انا جو طريقو خودڪار طريقي سان سڏيو ويندو. رستي جي ذريعي، ٻار جي طبقي کي ابن ڏاڏن جي ذريعي بيان ڪري سگهجي ٿو، اهو آهي، upcasting انجام ڏيڻ:
Parent parent = new Child()
هي شروعات صرف والدين طبقي ۾ موجود ميمبرن تائين رسائي حاصل ڪرڻ لاءِ استعمال ڪئي ويندي آهي ۽ اوور رائڊ ٿيل طريقن. اسان جي مثال ۾ اهو ٿيندو:
public class InheritDemo {

   public static void main(String[] args) {

       MusicalInstrument violin = new Violin(1, null, "Amati", "Kremer", 285, false);
       //violin.violinTuning();
       violin.work();
   }
}
اهڙي صورت ۾، اسان وائلن جي طريقي کي ترتيب ڏيڻ جي قابل نه آهيون. جڏهن ته ساڳئي وقت، ڪم ​​() نسل جي طبقي جو طريقو سڏيو ويندو، جيڪڏهن اهو موجود آهي.

جاوا پليٽ فارم جي درجي بندي

جاوا ۾، هر شي طبقن مان ٺهيل آهي ۽ اهي هڪ درجي جي ماتحت آهن. سوال ٿو پيدا ٿئي ته ڇا ڪو اهڙو طبقو آهي جنهن مان ٻيا سڀ ورثي ۾ مليا هجن؟ جواب آهي ها، بيشڪ اهڙو طبقو موجود آهي. ۽ ان کي سڏيو ويندو آهي صرف Object . java.lang پيڪيج مان آبجیکٹ ڪلاس، سڀني طبقن لاءِ عام رويي کي بيان ڪري ٿو ۽ لاڳو ڪري ٿو، بشمول جيڪي توهان ٺاهيو ٿا . جاوا پليٽ فارم ۾، ڪيترائي ڪلاس سڌو سنئون Object مان نڪتل آهن ، ٻيا طبقا انهن مان ڪجهه طبقن مان نڪتل آهن، ۽ ائين ئي، هڪ طبقاتي درجه بندي ٺاهيندي.

جاوا ۾ وراثت جا قسم

اچو ته جاوا ۾ ورثي جي ڪجھ قسمن کي اجاگر ڪريون. 1. سنگل وراثت هي قسم صرف اسان جي مٿين مثال وانگر آهي، ذيلي ڪلاس هڪ سپر ڪلاس جي خاصيتن کي ورثي ۾ آڻيندا آهن. هيٺ ڏنل تصوير ۾، ڪلاس A، نڪتل طبقي B لاءِ بنيادي ڪلاس جي طور تي ڪم ڪري ٿو. 2. ملٽي ليول وراثت هي صرف وراثت جو هڪ سلسلو آهي، يعني هڪ بنيادي ڪلاس A آهي، ڪلاس B ان مان ورثي ۾ آهي، ۽ ڪلاس سي. ڪلاس B مان ورثي ۾ ملي ٿو. جاوا ۾، هڪ ڪلاس سڌو سنئون دادا جي ميمبرن تائين رسائي نٿو ڪري سگهي. 3. Hierarchical Inheritance Hierarchical Inheritance ۾، ھڪڙو طبقو ھڪ کان وڌيڪ ذيلي ڪلاس لاءِ سپر ڪلاس (بيس ڪلاس) طور ڪم ڪري ٿو. مٿي، اسان فون ڪلاس جو هڪ مثال ڏنو، جنهن ۾ ٻه "ٻار" ٿي سگهن ٿا - AndroidPhone ۽ IPhone.
class A {
    public void printA() {
System.out.println("A");
 }
}

class B extends A {
    public void printB() {
 System.out.println(" B"); }
}

class C extends A {
    public void printC() {
System.out.println("C");
}
}

class D extends A {
    public void printD() {
System.out.println("D");
 }
}

public class Demo {
    public static void main(String[] args)
    {
        B objB = new B();
        objB.printA();
        objB.printB();

        C objC = new C();
        objC.printA();
        objC.printC();

        D objD = new D();
        objD.printA();
        objD.printD();
    }
}
پيداوار آهي:
اي بي اي سي ڊي
4. گھڻن وراثت، اھو آھي، ڪيترن ئي ابن ڏاڏن جي موجودگي ... پر انتظار ڪريو، جاوا ۾ کلاسک گھڻن ورثي جي حمايت نه ڪئي وئي آھي. ڪجهه حد تائين، ان کي لاڳو ڪري سگهجي ٿو نه طبقن، پر انٽرفيس استعمال ڪندي.
interface A {
   public void printA();
}

interface B {
   public void printB();
}

interface C extends A, B {
   public void print();
}
class InheritDemo implements C {
   @Override
   public void print()
   {
       System.out.println("Print something");
   }

   @Override
   public void printA() {
   }

   @Override
   public void printB() {
   }
}
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION