Junior
Кога се счита, че методът е презаписан (overriding)?
sobes.tech AI
Отговор от AI
Методът се счита за презаписан, когато в наследяващия клас се обяви метод със същата сигнатура (име на метода, брой и типове параметри в същия ред), както и в родителския клас. Освен това:
- Методът в родителския клас не трябва да бъде обявен като
final(или еквивалентен модификатор в други езици), който забранява презаписването. - Нивото на достъп на презаписания метод в наследяващия клас не може да бъде по-ограничително от това в родителския клас.
- Презаписаният метод може да връща същия тип като този в родителския клас или ковариантен тип (подтип на оригиналния тип).
- Презаписаният метод не може да хвърля по-общи (или несъвместими) изключения, отколкото тези, обявени в родителския метод.
- Статичните методи не могат да бъдат презаписвани, само скрити (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");
}
}