Sobes.tech
Junior

Кастинг (casting) дар Java чист?

sobes.tech AI

Ҷавоб аз AI

Тигезлик (casting) дар Java — ин тағйирёбии арзиши як навъи маълумот ба навъи дигар.

Намудҳои тигезлик:

  • Аниқ (Explicit Casting): Инро барномасоз бо ёрии оператор (тур) анҷом медиҳад. Барои тағйирёбии аз навъи "бузург" ба навъи "кичик" истифода мешавад (масалан, аз double ба int). Мумкин аст, ки ба талафоти маълумот оварда расонад.
    // автоматии (implicit) тарҷума
    int a = 10;
    double b = a; // int ба double
    
    // аниқ (explicit) тарҷума
    double c = 10.5;
    int d = (int) c; // double ба int, d хоҳад 10
    
  • Тарҷумаи автоматӣ (Implicit Casting / Widening Conversion): Автоматӣ аз ҷониби JVM анҷом дода мешавад, вақте ки аз навъи "кичик" ба навъи "бузург" (масалан, аз int ба double) тағйирёбӣ мешавад. Бехатар аст ва талафоти маълумотро намеорад.
    int x = 10;
    double y = x; // int автоматӣ ба double табдил меёбад
    

Тигезлик метавонад байни навъҳои асосӣ ё байни объектҳои дар ҳирасарии мерос қарор дошта бошад.

Барои тағйирёбии навъҳои объект:

  • Upcasting: Табдил додани субкласс ба суперкласс. Ин implicit ва бехатар аст.
    class Animal {}
    class Dog extends Animal {}
    
    Animal animal = new Dog(); // Upcasting
    
  • Downcasting: Табдил додани суперкласс ба субкласс. Аз рӯи талабот, бояд explicit ва бо истифода аз instanceof санҷиш анҷом дода шавад.
    Animal animal = new Dog(); // Upcasting
    
    // Downcasting - талаб мекунад explicit ва санҷиши `instanceof`
    if (animal instanceof Dog) {
        Dog dog = (Dog) animal;
        // Ҳоло метавон методҳои махсуси Dog-ро истифода бурд
    }