Junior — Middle
Как се различават статичните методи в обектно-ориентираното програмиране от методите, които се презаписват в наследяващите класове?
sobes.tech AI
Отговор от AI
Статичните методи в Java принадлежат на самия клас, а не на екземплярите. Те се извикват чрез името на класа и не могат да бъдат презаписвани в наследяващите класове, тъй като не участват в полиморфизма.
За разлика от тях, методите, които могат да бъдат презаписвани (нестатичните), принадлежат на обектите и поддържат динамичен полиморфизъм. При извикване на метод чрез препратка към базовия клас, реалната реализация се определя от типа на обекта по време на изпълнение.
Пример:
class Parent {
static void staticMethod() {
System.out.println("Статичен метод на Parent");
}
void instanceMethod() {
System.out.println("Метод на инстанция на Parent");
}
}
class Child extends Parent {
static void staticMethod() {
System.out.println("Статичен метод на Child");
}
@Override
void instanceMethod() {
System.out.println("Метод на инстанция на Child");
}
}
public class Test {
public static void main(String[] args) {
Parent p = new Child();
p.staticMethod(); // Изход: Статичен метод на Parent
p.instanceMethod(); // Изход: Метод на инстанция на Child
}
}
Тук статичният метод се извиква по типа на препратката (Parent), а нестатичният — по типа на обекта (Child).