Sobes.tech
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).