Junior — Middle
Czym różnią się metody statyczne w programowaniu obiektowym od metod nadpisywanych w klasach potomnych?
sobes.tech AI
Odpowiedź od AI
Metody statyczne w Java należą do samej klasy, a nie do instancji. Są wywoływane przez nazwę klasy i nie mogą być nadpisywane w klasach potomnych, ponieważ nie uczestniczą w polimorfizmie.
W przeciwieństwie do nich, metody, które można nadpisywać (niestatyczne), należą do obiektów i obsługują polimorfizm dynamiczny. Przy wywołaniu metody przez odwołanie do klasy bazowej, rzeczywista implementacja jest określana przez typ obiektu w czasie wykonywania.
Przykład:
class Parent {
static void staticMethod() {
System.out.println("Metoda statyczna Parent");
}
void instanceMethod() {
System.out.println("Metoda instancji Parent");
}
}
class Child extends Parent {
static void staticMethod() {
System.out.println("Metoda statyczna Child");
}
@Override
void instanceMethod() {
System.out.println("Metoda instancji Child");
}
}
public class Test {
public static void main(String[] args) {
Parent p = new Child();
p.staticMethod(); // Wypisze: Metoda statyczna Parent
p.instanceMethod(); // Wypisze: Metoda instancji Child
}
}
Tutaj, metoda statyczna jest wywoływana na podstawie typu odwołania (Parent), a metoda niestatyczna na podstawie typu obiektu (Child).