Sobes.tech
Junior

Вақте як усул ҳамчун ивазкунӣ ҳисоб мешавад (overriding)?

sobes.tech AI

Ҷавоб аз AI

Якметод ҳисоб мешавад, ки аз ҷониби дар синфи фарзандаш декларация шудааст, ки бо ҳамон сигнатура (номи метод, шумора ва намудҳои параметрҳо дар ҳамон тартиб) бо метод дар синфи падар. Илова бар ин:

  1. Метод дар синфи падар набояд ҳамчун final (ё модификатори баробар дар дигар забонҳо) эълон шавад, ки аз нав навиштанро манъ мекунад.
  2. Дар сатҳи дастрасӣ, ки методи навишташуда дар синфи фарзандаш дорад, набояд нисбат ба синфи падар маҳдудтар бошад.
  3. Метод навишташуда метавонад ҳамон навъи, ки дар синфи падар аст, ё навъи ковариант (подтип) баргардонад.
  4. Метод навишташуда набояд истисноҳои умумӣ (ё номувофиқ)ро бардорад, ки аз истисноҳои дар методи синфи падар эълоншуда, бештар бошанд.
  5. Методҳои статикӣ наметавонанд навишт шаванд, танҳо пинҳон карда мешаванд (hidden).

Вақте ки методи навишташударо тавассути истинод ба синфи падар, аммо бо объекти синфи фарзандаш даъват мекунем, версияи метод аз синфи фарзандаш иҷро мешавад (полиморфизм).

// Намуна дар Java

class Parent {
    public void display() { // Метод дар синфи падар
        System.out.println("Parent display");
    }

    // final void cannotOverride() { ... } // Ин метод наметавонад навишт шавад
}

class Child extends Parent {
    @Override // Анотация @Override кӯмак мекунад, ки компилятор санҷад, ки метод воқеан навишта шудааст
    public void display() { // Метод навишташуда - ҳамон сигнатура
        System.out.println("Child display");
    }
}