PGO Dziedziczenie Michail Mokkas
Spis treści Czym jest dziedziczenie? Co dziedziczą klasy? Dziedziczenie w Javie Przesłanianie metod Przykład dziedziczenia Klasy i metody abstrakcyjne Polimorfizm Przykład polimorfizmu Zadania
Czym jest dziedziczenie? Różne typy obiektów nieraz mają podobne cechy. np. samochody i rowery mają koła, kierownicę, biegi, itp. Prócz cech wspólnych, mogą dysponować takżę innymi cechami (niewspólnymi). W programowaniu obiektowym dziedziczenie służy do przekazywania cech wspólnych innym klasom bez konieczności ich przepisywania.
Co dziedziczą klasy? Klasa dziedziczy: Klasa nie dziedziczy: atrybuty metody klasy zagnieżdżone Klasa nie dziedziczy: konstruktora (podklasa może wywołać konstruktor nadklasy)
Dziedziczenie w Javie Wszystkie klasy w Javie dziedziczą od klasy Object Java umożliwia wielodziedziczenie typów – zdolność klasy do implementowania więcej niż jednego interfejsu Java nie umożliwia: wielodziedziczenia stanu – zdolność klasy do dziedziczenia atrybutów z więcej niż jednej klasy wielodziedziczenie implementacji - zdolnośc klasy do dziedziczenia definicji metod z więcej niż jednej klasy źródło ilustracji: https://docs.oracle.com/javase/tutorial/figures/java/classes-object.gif
Przesłanianie metod Metoda w klasie nadrzędnej, która ma taką samą nazwę, ilość parametrów, i typ jest możliwa do przesłonięcia w klasie podrzędnej. Mechanizm ten wykorzystywany jest do zmiany zachowania metody z klasy nadrzędnej w klasie podrzędnej. Przypomnienie: toString() Użycie adnotacji @Override jeżeli kompilator zauważy, że metoda, którą chcemy przesłonić, nie istnieje w żadnej z klas nadrzędnych to wygeneruje błąd
Przykład dziedziczenia
Przykład dziedziczenia kont. 1
Rezultat Konsola:
Klasy i metody abstrakcyjne Słowo kluczowe abstract: dla metody oznacza, że nie ma implementacji (ciała). Klasy podrzędne muszą dostarczać implementację. abstract void display(String str); dla klasy, że nie może być instancjowana (nie możemy tworzyć jej obiektów). public abstract class Person{ //atrybuty //metody //metody abstrakcyjne }
Polimorfizm Z gr. : πολύς (wiele) + μορφή (kształt/postać) = wielopostaciowość Jest to mechanizm, który umożliwia wykorzystanie pewnego zachowania dla potencjalnie wielu klas implementujących to zachowanie (metodę). Zdolność obiektów jakiegoś typu na korzystanie z tego samego interfejsu, lecz innej jego implementacji.
Przykład polimorfizmu
Rezultat Konsola:
Zadanie D1 Stwórz klasy Pracownik, Programista i Administrator Klasa Pracownik powinna być klasą abstrakcyjną. Zarówno programista jak i administrator powinni posiadać pola: ID pracownika imię nazwisko Dodatkowo programista powininen posiadać pole: lista języków programowania (tablica) A administrator powininen posiadać pole: lista systemów pod opieką (tablica) Użyj dziedziczenia.
Zadanie D2 Przerób poniższy diagram klas (UML Class Diagram) na kod.
Zadanie D3 Stwórz klasy Vehicle, Car i Racingcar. Korzystając z dziedziczenia oraz przesłonięcia napisz metodę display_typeOfVehicle(); Tak, aby było możliwe wykonanie następującego kodu: Vehicle v = new Vehicle(); Car c = new Car(); Racingcar rc = new Racingcar(); v.display_typeOfVehicle(); c.display_typeOfVehicle(); rc.display_typeOfVehicle(); Rezultat (konsola): This is a vehicle. This is a car. This is a racing car.
Zadanie D4 Stwórz klasy Browser, Chrome, Firefox i Opera. Powinno być możliwe wykonanie następującego kodu: Browser chrome = new Chrome(); Browser firefox = new Firefox(); Browser opera = new Opera(); chrome.info(); firefox.info(); opera.info(); Rezultat (konsola): To jest Chrome. To jest Firefox. To jest Opera. Użyj polimorfizmu.