Sobes.tech
Junior

Kiedy metoda jest uważana za nadpisaną?

sobes.tech AI

Odpowiedź od AI

Metoda uważa się za nadpisaną w następujących przypadkach:

  1. Jest zadeklarowana w klasie pochodnej.
  2. Ma taką samą nazwę jak metoda w klasie nadrzędnej.
  3. Ma taką samą sygnaturę (liczbę i typy parametrów) oraz kolejność parametrów.
  4. Ma typ zwracanego wyniku zgodny z typem zwracanym metody w klasie nadrzędnej (kowariancja, jeśli dotyczy).
  5. Ma taki sam lub szerszy modyfikator dostępu niż metoda w klasie nadrzędnej (w większości języków obiektowych).
  6. Metoda nadrzędna jest zadeklarowana jako wirtualna, abstrakcyjna lub interfejsowa (w językach, które wymagają wyraźnego wskazania możliwości nadpisania, np. C# ze słowem kluczowym virtual).

Przykład w Javie:

// Klasa nadrzędna
class SuperClass {
    // Metoda, którą można nadpisać
    public void display() {
        System.out.println("To jest metoda display klasy SuperClass.");
    }
}

// Klasa pochodna
class SubClass extends SuperClass {
    // Nadpisana metoda display
    @Override // Adnotacja do sprawdzania nadpisania na etapie kompilacji
    public void display() {
        System.out.println("To jest metoda display klasy SubClass.");
    }
}

Przykład w Pythonie:

# Klasa nadrzędna
class SuperClass:
    # Metoda, którą można nadpisać
    def display(self):
        print("To jest metoda display klasy SuperClass.")

# Klasa pochodna
class SubClass(SuperClass):
    # Nadpisana metoda display
    def display(self):
        print("To jest metoda display klasy SubClass.")

Kluczowe jest zachowanie nazwy i sygnatury metody, ale zmiana jej zachowania w klasie pochodnej.

Ważna różnica w stosunku do przeciążania (overloading):

Przeciążanie to deklaracja wielu metod o tej samej nazwie w jednej klasie, ale z różnymi sygnaturami. Nadpisywanie (overriding) to deklaracja metody w klasie pochodnej z tą samą nazwą i sygnaturą co w klasie nadrzędnej.