Commit 0ddb4424 by Patryk Czarnik

Nadpisywanie metod

parent 09d90f85
...@@ -39,7 +39,24 @@ public class PrzykladDziedziczenie { ...@@ -39,7 +39,24 @@ public class PrzykladDziedziczenie {
// Ale w podklasie można zdefiniować konstruktor, który inicjalizuje wszystko, co trzeba, częściowo za pomocą super(...) // Ale w podklasie można zdefiniować konstruktor, który inicjalizuje wszystko, co trzeba, częściowo za pomocą super(...)
Student student3 = new Student("Marek", "Markowski", 23, 3, "informatyka"); Student student3 = new Student("Marek", "Markowski", 23, 3, "informatyka");
System.out.println(student3);
System.out.println(student3.jestPelnoletnia());
osoba.przedstawSie();
student3.przedstawSie();
// Nawet, gdy obiekt Student zostanie zapisany w zmiennej typu Osoba,
// to i tak wykona się wersja metody zdefiniowana w klasie Student.
Osoba[] osoby = {osoba, student, student3};
System.out.println("\nWitajcie osoby, przedstawcie się...");
for(Osoba ktos : osoby) {
ktos.przedstawSie();
}
System.out.println();
System.out.println("Osoby idą do Żabki...");
for(Osoba klient : osoby) {
zabka.sprzedajPiwo(klient);
}
} }
} }
...@@ -17,6 +17,13 @@ public class Student extends Osoba { ...@@ -17,6 +17,13 @@ public class Student extends Osoba {
this.kierunek = kierunek; this.kierunek = kierunek;
} }
// Jeśli chodzi o metody, podklasa może
// 1) Nie zmieniać metod odziedziczonych z nadklasy
// przykład: jestPelnoletnia()
// Taka metoda w nadklasie może być zadeklarowana jako "final" - to znaczy,
// że jest to ostateczna definicja i podklasa nie może jeje zmienić
// 2) Dodać nowe metody, których nie było w nadklasie
void dodajOcene(int ocena) { void dodajOcene(int ocena) {
oceny.add(ocena); oceny.add(ocena);
} }
...@@ -29,4 +36,23 @@ public class Student extends Osoba { ...@@ -29,4 +36,23 @@ public class Student extends Osoba {
return suma / oceny.size(); return suma / oceny.size();
} }
// 3) Nadpisać (override) metody, które były zdefiniowane w nadklasie
// czyli dla istniejących metoda podać inną treść.
@Override
void przedstawSie() {
System.out.println("Hej tu "+ imie + " " + nazwisko
+ ", studiuję kierunek " + kierunek + ", jestem na " + rok + " roku.");
}
// Od Javy 5 przed definicją metody, która nadpisuje definicję z nadklasy, można umieścić adnotację @Override
// Ważne: nawet bez tej adnotacji nadpisanie jest skuteczne. Adnotacja tylko:
// - zwiększa czytelność kodu ("rzuca się w oczy")
// - powoduje błąd kompilacji, gdyby okazało się, że jednak tutaj nie nadpisujemy metody, tylko definiujemy nową (np. literówka w nazwie, parametry innego typu)
@Override
public String toString() {
// do tego, co zwraca toString zdefiniowany w klasie Osoba, dodaję info o roku i kierunku studiów:
return super.toString() + ", studiuje na " + rok + " roku kierunku " + kierunek;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment