JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ حوالن جي قسمن کي تبديل ڪرڻ
Sant9Iga
سطح

جاوا ۾ حوالن جي قسمن کي تبديل ڪرڻ

گروپ ۾ شايع ٿيل
سٺو ڏينهن، جاوراش انسان. مون جاوا ۾ ڪاسٽنگ ريفرنس جي قسمن بابت سوال حاصل ڪرڻ شروع ڪيا. هر دفعي ساڳئي شيء کي ٻيهر نه ڏيڻ لاء، مون هڪ مختصر مضمون لکڻ جو فيصلو ڪيو.

پهرين، اچو ته ڏسو ته ڪهڙي قسم جي ڪاسٽنگ آهي.

ٽائيپ ڪاسٽنگ (قسم جي بدلي) ھڪڙي قسم جي ھڪڙي قسم جي ھڪڙي قسم جي قيمت کي ٻئي قسم جي قيمت ۾ تبديل ڪرڻ آھي. اچو ته هڪ مثال ڏسو ته اهو ڇا آهي ۽ اهو ڇا سان کائي ٿو. اسان وٽ ڪجھ طبقن جو درجو آھي ( ڏسو شڪل 1 ). هتي توهان سڀني طبقن جي درجه بندي کي ڏسي سگهو ٿا، ڪير ڪير وارث آهي، ۽ هر طبقي جا طريقا. تصوير 1اتي هڪ توسيع ۽ هڪ معاهدو اضافو آهي. اسان ڏسون ٿا ته طبقو Catطبقي جو اولاد آهي Pet. Pet، موڙ ۾، طبقي جو جانشين آهي Animal. جڏهن اسان لکون ٿا:
Animal animalCat = new Cat();
Animal animalDog = new YorkshireTerrier();
هي هڪ وڌائڻ وارو کاسٽ آهي (يا هڪ ضمير هڪ). اسان لنڪ کي وڌايو آهي animalCat۽ animalDog. اهي شيون Cat۽ Dog. اهڙي قسم جي ڪاسٽ سان، اسان animalCat/animalDogطريقن کي هڪ حوالي سان نه ٿا سڏي سگھون جيڪي اندر آهن Cat/Dog، پر جيڪي نه آهن Animal. هڪ تنگ ڪرڻ (يا واضح) ڪاسٽ سامهون اچي ٿو:
Animal animalCat = new Cat();
Animal animalDog = new YorkshireTerrier();
Cat cat =(Cat)animalCat;
YorkshireTerrier dog = (YorkshireTerrier) animalDog;
اسان واضح طور تي اشارو ڪيو آهي ته ڪهڙي قسم جي اسان هن اعتراض کي اڇلائڻ چاهيون ٿا. پر، محتاط رھو!!! جيڪڏهن توهان هن طرح ڪندا آهيو:
Animal animalCat = new Cat();
YorkshireTerrier dog = (YorkshireTerrier) animalCat;
ڪمپيلر هن ڪوڊ کي ڇڏي ڏيندو. پر RunTimeاهو توهان ڏانهن اڇلائي ڇڏيندو:
Exception in thread "main" java.lang.ClassCastException: Animals.Cat cannot be cast to Animals.YorkshireTerrier
RunTimeڏسجي ٿو ته ٻه مختلف طبقا Catآهن YorkshireTerrier. تنگ ڪرڻ دوران ClassCastException کان بچڻ لاءِ ، استعمال ڪريو instanceof.
Animal animalCat = new Cat();
if (animalCat instanceof YorkshireTerrier)
{
    YorkshireTerrier dog = (YorkshireTerrier) animalCat;
}
جيڪڏهن animalCatاهو آهي YorkshireTerrier، ته تفويض ٿيندي، جيڪڏهن نه، ڪجهه به نه ٿيندو.

هاڻي اهو ڇو ضروري آهي جيڪڏهن اسان طريقا وڃائي سگهون ٿا ۽ اهڙيون غلطيون حاصل ڪري سگهون ٿا

اچو ته ان ڪوڊ کي ڏسون جيڪو مون تصوير ۾ ڏنل ڊراگرام مطابق ٺاهيو آهي . 1 . ڪلاسAnimal
public abstract class Animal
{
    String name;
    int age;
    String nameOfClass = getClass().getSimpleName();
    public void eat(){
        System.out.println(nameOfClass + ": Omnomnom");
    }
    public void sleep(){
        System.out.println(nameOfClass + ": Z-z-z-z");
    }
}
ھڪڙو طبقو WildAnimalجيڪو ورثي ۾ ملي ٿوAnimal
public abstract class WildAnimal extends Animal
{
    public void steelChicken()
    {
        System.out.println(nameOfClass+": Muhaha,I stole a chicken!");
    }
}
ھڪڙو طبقو Petجيڪو ورثي ۾ ملي ٿوAnimal
public abstract class Pet extends Animal
{
    public void peeInTray(){
        System.out.println(nameOfClass + ": Master, I peed");
    }
}
ھڪڙو طبقو Foxجيڪو ورثي ۾ ملي ٿوWildAnimal
public class Fox extends WildAnimal
{
    public void eatColobok(){
        System.out.println(nameOfClass + ": I will eat you, Colobok");
    }
}
ھڪڙو طبقو Wolfجيڪو ورثي ۾ ملي ٿوWildAnimal
public class Wolf extends WildAnimal
{
    public void hawlAtTheMoon(){
        System.out.println(nameOfClass + ": Ouuuuu!!!Ouuuu!!!");
    }
}
ھڪڙو طبقو Catجيڪو ورثي ۾ ملي ٿوPet
public class Cat extends Pet
{
    public void sleepOnKeyboard(){
        System.out.println(nameOfClass + ": Master, stop working!!I wanna sleep on your keyboard");
    }
}
ھڪڙو طبقو YorkshireTerrierجيڪو ورثي ۾ ملي ٿوPet
public class YorkshireTerrier extends Pet
{
    public void bark(){
        System.out.println(nameOfClass + ": Meow!!! Meow!!!");
    }
}
صورتحال جو تصور ڪريو. اسان سڀني جانورن کي ھڪڙي فهرست ۾ گڏ ڪرڻ جي ضرورت آھي، انھن کي کارايو ۽ پوء انھن کي بستري ۾ وجھو. اهو ڪرڻ آسان آهي جيڪڏهن اسان ArrayListجانورن کي ٺاهيو ( Animal). ۽ پوء اسان هر جانور لاء لاڳاپيل طريقا سڏين ٿا:
public class ZOO
{
    public static void main(String[] args)
    {
        List<Animal> allAnimals = new ArrayList<>();
        allAnimals.add(new Cat());
        allAnimals.add(new Wolf());
        allAnimals.add(new Fox());
        allAnimals.add(new YorkshireTerrier());
        for (Animal animal : allAnimals)
        {
            animal.eat();
            animal.sleep();
        }
    }
}
animalمان طريقي کي سڏي نٿو سگهان bark()يا sleepOnKeyboard(). ڇاڪاڻ ته چادر allAnimals۾ ٻلي، هڪ بگھڙ، هڪ يارڪ ۽ هڪ لومڙ شامل آهن، پر اهي گهٽجي ويا آهن Animal. ۽ انهن وٽ صرف اهي طريقا آهن جيڪي آهن Animal. اهو تمام سٺو آهي، ڇاڪاڻ ته جيڪڏهن اسان سڀني طريقن کي سڏي سگهون ٿا، ته پوء اسان کي هڪ بگھڙ جي ضرورت آهي جيڪو ڪيبورڊ تي سمهي ٿو، يا هڪ يارڪ جيڪو ڪڪڙ چوري ٿو؟ توهان جي توجه لاء مهرباني. مون کي اميد آهي ته هي مضمون توهان لاء مفيد ٿيندو. تنقيد ۽ تبصرا ڀليڪار آهن)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION