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:
- Jest zadeklarowana w klasie pochodnej.
- Ma taką samą nazwę jak metoda w klasie nadrzędnej.
- Ma taką samą sygnaturę (liczbę i typy parametrów) oraz kolejność parametrów.
- Ma typ zwracanego wyniku zgodny z typem zwracanym metody w klasie nadrzędnej (kowariancja, jeśli dotyczy).
- Ma taki sam lub szerszy modyfikator dostępu niż metoda w klasie nadrzędnej (w większości języków obiektowych).
- 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.