JavaRush /جاوا بلاگ /Random-UR /جاوا میں حوالہ کی اقسام کو تبدیل کرنا
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ہیں ۔ تبادلوں کو تنگ کرنے کے دوران ClassCastExceptionYorkshireTerrier سے بچنے کے لیے ، استعمال کریں ۔ 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