Override w Javie

0

Witam. Mam pytanie dotyczące adnotacji Override:

class Klasa {
	
	Klasa() {
		System.out.println("Konstruktor Klasa");
	}
	
	void metoda(int i, float f) {
		System.out.println("Ok");		
	}

	void metoda(int i) {
		System.out.println("Int: " + i);
	}
	
	void metoda(float f) {
		System.out.println("Float: " + f);
	}
	
	void metoda(char c) {
		System.out.println("Char: " + c);
	}
}

class Jakas extends Klasa{
	
	Jakas() {
		System.out.println("Konstruktor Jakas");
	}
	
	@Override void metoda(int i, float f) {
		System.out.println("Int i Float: " + i + " " + f);
	}
}

public class Glowna {


	public static void main(String[] args) {

		Jakas a = new Jakas();
		a.metoda(10, 10.5f);

	}
}
 

Z tego co napisane jest w Thinking in Java wnioskuję, że dodanie Override powoduje to, że metoda o nazwie "metoda" w klasie Jakas przesłania wszystkie metody w klasie Klasa i w przypadku gdy zrobię np. wywołanie a.metoda('a'); to zgłosi błąd. Jednak chyba nie do końca tak to działa. Czy mógłby mi ktoś rozjaśnić co dokładnie powoduje dodanie tej adnotacji?

2

@Override generalnie nie ma żadnego wpływu na działanie programu. Ma natomiast wpływ na kompilację i zgłaszanie błędów przez IDE. Adnotacją @Override zgłaszasz, że dana metoda przeciąża dokładnie taką samą (modulo widoczność) metodę z klasy bazowej. Jest to przydatne w wyłapywaniu literówek - jeżeli wydaje ci się, że przeciążyłeś metodę, a w rzeczywistości nie przeciążyłeś bo walnąłeś literówkę to raczej to zauważysz jeśli wstawisz @Override - oczywiście o ile literówka nie spowoduje, że przeciążysz jakiejś innej metody.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.