Szukaj

1944

Reklama

Chroń swoje dziecko

w Internecie
Reklama

za darmo ...

Kalendarz

Reklama

Jak odbierasz ...

Wygląd portalu
 

"Musicie od siebie wymagać, nawet jeśli inni by od Was nie wymagali..." JP2 [100%]

Reklama
Przesłanianie metod i pól - Przesłanianie metod PDF Drukuj Email
Ocena użytkowników: / 7
SłabyŚwietny 
Instrukcje dodatkowe - Programowanie w języku JAVA
Wpisany przez Administrator   
Spis treści
Przesłanianie metod i pól
Co powinieneś już wiedzieć?
Przypomnienie niezbędnych wiadomości
Przesłanianie metod
Odwołania krzyżowe
Przesłanianie pól
Zadania utrwalające
Rozwiązania
Wszystkie strony

 

Przesłanianie metod

Czyli możliwe jest przeciążanie metod w dziedziczeniu. Pamiętamy też, że warunkiem koniecznym dla istnienia dwóch , metod o tej samej nazwie była różnica między nimi polegająca na zastosowaniu innej ilości lub innego typu parametrów. czyli nie można było zdefiniować dwóch metod o tej samej nazwie i tym samym zestawie parametrów. Przekonajmy się:

 

Zad. 2: Zmodyfikuj powyższy program: w klasie punkt dodaj jeszcze jedną metodę o nazwie  ustaw_wspolrzedne, która przyjmuje dwa argumenty typu double: nX oraz nY, która nic nie robi.

 

Jak widać na powyższym obrazku, zdefiniowanie jeszcze raz metody o takiej samej nazwie i takich samych argumentach nie uda się: system wyświetla informację o błędzie (czerwone kółeczko z wykrzyknikiem):

Komunikat błędu:

Podana metoda jest już zdefiniowana w klasie punkt.

Teraz, idąc tym samym tokiem rozumowania, zdefiniowanie tej klasy w klasie punkt3d, która dziedziczy z klasy punkt powinno zakończyć się tym samym błędem - przecież dziedziczy ona z klasy punkt, więc będzie "miała" już odziedziczoną metodę ustaw_wspolrzedne, która przyjmuje dwa argumenty typu double: nX oraz nY, właśnie po klasie punkt. Sprawdźmy jednak, czy mamy rację:

 

Zad. 3: Zmodyfikuj powyższy program. Dodaj do klasy punkt3d metodę ustaw_wspolrzedne, która przyjmuje dwa argumenty typu double: nX oraz nY.

(oczywiście usuń powodującą błąd metodę, którą dodaliśmy w zadaniu 2.)

 

Zauważ, że system nie alarmuje czerwonym kółeczkiem o wystąpieniu błędu. Na zdrową logikę, powinien: klasa punkt3d ma teraz 2 metody o takiej samej nazwie i tych samych parametrach: jedną odziedziczoną z klasy punkt, a drugą - "swoją" - dodaną na poziomie klasy potomnej - punkt3d.

Dlaczego tak się dzieje? Odpowiedź jest prosta: właśnie odkryliśmy przysłanianie metod. Przyjrzyjmy się definicji:

Przysłanianie metod to stosowanie dwóch lub więcej metod o takiej samej nazwie i argumentach, w klasach bazowej i potomnych.

 

Czyli w jednej klasie nie może się identyczna metoda powtórzyć, za to może się powtórzyć w klasach dziedziczących i dziedziczonych.

No dobra, ale teraz pewnie powiesz tak: skoro klasa punkt3d ma teraz dwie metody ustaw_wspolrzedne, która przyjmuje dwa argumenty typu double: nX oraz nY - jedną z klasy bazowej a drugą "swoją". Jeśli ją więc wywołamy, to którą z nich uruchomi i skąd będzie wiedziała którą ma uruchomić? Sprawdźmy na prostym przykładzie.

Zad. 4: Zmodyfikuj powyższy program: skopiuj funkcjonalność metody ustaw_wspolrzedne (double nX, double nY) do klasy punkt3d. W każdej z nich jednak wstaw komunikat informujący, czy metoda jest wywołana z klasy bazowej (punkt) czy potomnej (punkt3d).

 

Zauważ, że obiekt p1 użył metody ze swojej klasy (co było do przewidzenia), natomiast obiekt p2 użył tej metody, która była w jego własnej klasie, ponieważ przysłoniła ona metodę w klasie bazowej (punkt).

Wniosek: obiekty, w sytuacji, kiedy dana metoda jest przysłoniona (powtarza się) wywołują tą, która jest najbliżej ich: w ich własnej klasie lub najbliższej klasie bazowej.