Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski



Podobne dokumenty
Programowanie Obiektowe (Java)

Programowanie w języku Java. Kolekcje

Wydział Fizyki i Informatyki Stosowanej, Uniwersytetu Łódzkiego Łódź. Java podstawy języka, wykład 4 1

java.util.* :Kolekcje Tomasz Borzyszkowski

Podstawy otwartych języków programowania Przechowywanie danych

Kolekcje. Na podstawie:

Kolekcja (kontener) to po prostu obiekt, który grupuje wiele elementów w jeden twór.

Kolekcje mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Kolekcje - pakiet Java Collections Framework

Programowanie obiektowe

Język JAVA podstawy. Wykład 4, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Java Collections Framework

Kolekcje - pakiet Java Collections Framework

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Kurs programowania. Wykład 9. Wojciech Macyna

Dawid Gierszewski Adam Hanasko

Java niezbędnik programisty spotkanie nr 8. Kolekcje c.d.

Java SE Laboratorium nr 7. Temat: Kolekcje

KOLEKCJE JAVY API: NAJPROSTSZE PODSTAWY

jlabel: void setalignment(label.center/left/right) - wyrównanie String gettext() pobiera aktualny tekst napisu void settext(string text) ustawia

Lista, Stos, Kolejka, Tablica Asocjacyjna

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Języki i metody programowania Java INF302W Wykład 3 (część 2)

Kolekcje. object that groups multiple elements into a single unit

Tworzenie aplikacji w języku Java

Kolekcje obiektów. Wyj tki.

Wykład 4. Klasa List Kolejki Stosy Słowniki

Comparable<Klasa_uzytkownika>

Programowanie i projektowanie obiektowe

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Platformy Programistyczne Podstawy języka Java

Kolekcje w Javie cz. 1

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Programowanie obiektowe i język Java

GUI - projektowanie interfejsów cz. II

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie w Javie- wykład 11 Kolekcje (listy)

Technologie i usługi internetowe cz. 2

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Kolekcje w języku Java

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Algorytmy i Struktury Danych.

Java: interfejsy i klasy wewnętrzne

Programowanie obiektowe

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Klasy i obiekty cz II

Enkapsulacja, dziedziczenie, polimorfizm

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie i projektowanie obiektowe

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Narzędzia 2. dr inż. Tadeusz Jeleniewski

Języki i techniki programowania Ćwiczenia 4 Wzorce

Kurs WWW. Paweł Rajba.

Dokumentacja do API Javy.

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Definiowanie własnych klas

import java.util.*; public class ListExample { public static void main(string args[]) { List<String> lista1= new ArrayList<String> ();

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

WYJĄTKI, KOLEKCJE ZAGADNIENIA: 1. Wyjątki, 2. Kolekcje, vector, hashtable, properties, Klasy Arrays i Collections.

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Wykład 3 Składnia języka C# (cz. 2)

Programowanie i struktury danych

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Szablony klas, zastosowanie szablonów w programach

Programowanie obiektowe

Wykład 7: Pakiety i Interfejsy

Programowanie w Internecie. Java

UML a kod. C++, Java i C#

Programowanie obiektowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Modelowanie obiektowe

Podstawy programowania. Podstawy C# Tablice

Klasy abstrakcyjne i interfejsy

Dziedziczenie. dr Jarosław Skaruz

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Wykład 2: Podstawy Języka

Wykład 6: Dziedziczenie

Podstawy Języka Java

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Programowanie obiektowe

Polimorfizm. dr Jarosław Skaruz

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Języki i metody programowania Java Lab4 podejście obiektowe, zastosowanie pojemników

Kompletna dokumentacja kontenera C++ vector w -

PARADYGMATY PROGRAMOWANIA Wykład 4

PHP: bloki kodu, tablice, obiekty i formularze

Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór

Transkrypt:

Realizacja ekstensji klasy Paulina Strzelecka, Tomasz Roszkowski

Przechowywanie obiektów (odwolañ do obiektów) w Javie typ wbudowany - tablica zbiór klas kontenerowych Paulina Strzelecka, Tomasz Roszkowski 1

U ywanie tablic (1) TABLICA - najbardziej wydajny sposób zapisu i swobodnego dostêpu do ci¹gu obiektów (referencji) MINUS - musimy z góry ustaliæ rozmiar tablicy czêœci¹ obiektu tablicy jest sk³adowa tylko do odczytu o nazwie length (iloœæ elementów)* *UWAGA! length mówi jedynie jaki jest rozmiar obiektu tablicowego, nie podaje liczby elementów, które tablica aktualnie zawiera odwo³anie - jedynie przez zapis '[ ]' tablice typów podstawowych s¹ automatycznie inicjowane wartoœci¹ 0 lub false Paulina Strzelecka, Tomasz Roszkowski 2

U ywanie tablic (2) tablice obiektów i typów podstawowych s¹ niemal identyczne w u yciu. RÓ NICA: tablice obiektów przechowuj¹ odwo³ania, a tablice typów podstawowych bezpoœrednio wartoœci klasy kontenerowe mog¹ przechowywaæ wy³¹cznie referencje do obiektów. Tablice mog¹ tak e bezpoœrednio przechowywaæ typy podstawowe tablica mo e byæ wartoœci¹ zwracan¹ przez funkcjê Paulina Strzelecka, Tomasz Roszkowski 3

U ywanie tablic (3) Klasa Arrays klasa z pakietu java.util - posiada zestaw metod statycznych, przydatnych do wykonywania pewnych operacji na tablicach. 4 podstawowe funkcje: equals( ) - do sprawdzania równoœci tablic fill( ) - do wype³niania tablicy okreœlon¹ wartoœci¹ sort( ) - do sortowania tablicy binarysearch( ) - do wyszukiwania elementu w tablicy posortowanej wszystkie z tych metod maj¹ wersje przeci¹ one dla ka dego z typów podstawowych i Object, ale dzia³anie funkcji jest mocno ograniczone. Jest te metoda: aslist( ) - zamienia dowoln¹ tablicê w kontener List Paulina Strzelecka, Tomasz Roszkowski 4

U ywanie tablic (4) Klasa Arrays kopiowanie tablicy -standardowa biblioteka Java dostarcza nam statycznej metody: System.arrayCopy( ) - znacznie szybsze kopiowanie tablic ni w pêtli for porównywanie - interface java.lang.comparable - interface z jedyn¹ metod¹ compareto(object) Paulina Strzelecka, Tomasz Roszkowski 5

KONTENERY Podstawowe typy: List Set Map Paulina Strzelecka, Tomasz Roszkowski 6

Dwa sposoby przechowywania naszych obiektów: Kolekcja Collection - grupa odrêbnych obiektów, czêsto podlegaj¹cych jakimœ regu³om ( np. lista typu List musi przechowywaæ elementy w okreœlonej kolejnoœci, a zbiór Set nie mo e zawieraæ elementów zduplikowanych). Odwzorowanie Map - grupa par obiektów typu klucz-wartoœæ. (z Map mo na uzyskaæ zbiór kluczy, kolekcjê wartoœci lub zbiór par) Paulina Strzelecka, Tomasz Roszkowski 7

Ogólne cechy kontenerów (1) Collection (przechowuje pojedyncze elementy) - List - przechowuje grupê elementów w okreœlonej kolejnoœci - ArrayList - LinkedList - Set - zbiór, który pozwala na dodanie tylko pojedynczego elementu danego rodzaju - HashSet - TreeSet Map (odwzorowanie przechowuj¹ce pary klucz-wartoœæ) - HashMap - TreeMap Paulina Strzelecka, Tomasz Roszkowski 8

Podstawowe cechy kontenerów (2) List - przechowuje elementy dok³adnie tak jak zosta³y wprowadzone, bez adnej zmiany kolejnoœci lub edycji Set - akceptuje tylko jeden egzemplarz obiektu i stosuje w³asny wewnêtrzny sposób ustalania kolejnoœci Map - akceptuje tylko pojedyncze wartoœci jako klucze i ma wewnêtrzny porz¹dek; nie dba o kolejnoœæ, w jakiej dodajemy elementy. Paulina Strzelecka, Tomasz Roszkowski 9

Podstawowe operacje na kontenerach dodawanie elementów do kontenerów add(object) - dodanie obiektu do Collection put(object, Object) - dodanie elementu do Map wyœwietlanie obiektów przeci¹ ona metoda tostring() z klasy Object - - elementy Collection s¹ oddzielone przecinkami i wypisywane w nawiasach kwadratowych - elementy Map w nawiasach klamrowych jako klucz=wartoœæ wype³nianie kontenerów ta sama s³aboœæ co java.util.arrays. Mamy tu klasê towarzysz¹c¹ - Collections, zawieraj¹c¹ statyczne metody us³ugowe ( m.in. fill( )). Metoda ta kopiuje pojedyncz¹ referencje do obiektu dla ca³ego kontenera i dzia³a tylko dla obiektu List! Paulina Strzelecka, Tomasz Roszkowski 10

WADA KONTENERA - nieznany typ (1) utrata informacji o typie, kiedy ju zamieœcimy obiekt w kontenerze. Kontener przechowuje odwo³ania do obiektów typu Object. co z tego wynika? - poniewa informacja o typie ginie, nie ma ograniczeñ co do typu zamieszczanych obiektów - trzeba wykonaæ rzutowanie do w³aœciwego typu, zanim siê go u yje (podczas wykonywania - b³¹d przy konwersji, jeœli zosta³ w kontenerze wstawiony inny typ obiektu)* Paulina Strzelecka, Tomasz Roszkowski 11

WADA KONTENERA - nieznany typ (2) * co zrobiæ, jeœli chcemy narzuciæ, by metoda add() pobiera³a obiekty tylko jednego typu? jeœli nasza klasa bêdzie rozszerzaæ np. klasê ArrayList, to nawet je eli stworzymy metodê add( NaszTyp), to metoda po prostu przeci¹ y (a nie przes³oni) istniej¹c¹ add(object). Nale y zatem stworzyæ klasê NaszTyp, której prywatnym atrybutem bêdzie obiekt ArrayList, wtedy metoda add(nasztyp) bêdzie dzia³a³a prawid³owo (wtedy adne rzutowanie nie jest potrzebne). Paulina Strzelecka, Tomasz Roszkowski 12

WADA KONTENERA - nieznany typ (3) Kiedy dzia³a bez rzutowania? klasa String - dodatkowa moc od kompilatora. Kiedy kompilator spodziewa siê obiektu String i go nie dostaje, to automatycznie wywo³uje metodê tostring(), zdefiniowanê w klasie Object, która mo e byæ przes³oniêta przez ka d¹ klasê Javy. Paulina Strzelecka, Tomasz Roszkowski 13

Klasa ArrayList Klasa ArrayList -tworzy siê tablica o konkretnym rozmiarze, a gdy zabraknie w niej miejsca, tworzy sie nowa i wszystkie odwo³ania zostaj¹ przeniesione z jednej do drugiej (zauwa alnie mniej wydajna ni tablica). - wk³adamy obiekty metod¹ add() - wyci¹gamy obiekty metod¹ get(indeks) - metoda size() Paulina Strzelecka, Tomasz Roszkowski 14

Iteratory (1) Dla ka dej klasy kontenerowej musimy posiadaæ sposób na zamieszczenie tam elementów i sposób na ich pobranie: add() z ArrayList - w³ó get(indeks) z ArrayList - pobierz iteracja jest wygodna, ale ma³o abstakcyjna. Gdybyœmy chcieli napisaæ kawa³ek kodu, który nie dba o to z jakim kontenerem ma do czynienia, potrzebne nam jest pojêcie iteratora. Paulina Strzelecka, Tomasz Roszkowski 15

Iteratory (2) Iterator - obiekt, którego zadaniem jest przemieszczanie siê po ci¹gu elementów i wybieranie ka dego z napotkanych obiektów bez przejmowania siê wewnêtrzn¹ struktur¹ tego ci¹gu. (stworzenie go jest ma³o kosztowne) W Javie - interfejs Iterator: ( jeden kierunek) - wywo³uj¹c metodê o nazwie iterator() na kontenerze - dostajemy jego iterator (zbiór elementów) Iterator taki jest gotowy do zwrócenia pierwszego elementu z ci¹gu przy pierwszym wywo³aniu metody next() - nastêpny element - next() - sprawdzenie czy s¹ jeszcze elementy - hasnext() - usuniêcie ostatniego zwróconego przez iterator elementu - remove() Dziêki iteratorowi nie trzeba siê marwiæ o numer elementu w kontenerze. Paulina Strzelecka, Tomasz Roszkowski 16

Rodzaje kontenerów (1) Paulina Strzelecka, Tomasz Roszkowski 17

Rodzaje kontenerów (2) Interfejsy powi¹zane z przechowywaniem obiektu: - Collection - List - Set - Map Klasy Abstract - klasy czêœciowo implementuj¹ce okreœlony interfejs. Np. tworz¹c w³asny zbiór Set, nie startujemy od implementacji interfejsu Set i implementacji jego wszystkich metod, ale dziedziczymy z AbstractSet - aby wykonaæ minimum pracy. Paulina Strzelecka, Tomasz Roszkowski 18

Interfejs Collection wszystko co mo na zrobiæ z Collection (Set i List - listy maj¹ jeszcze dodatkowe funkcje) boolean add(object) boolean AddAll(Collection) void clear() boolean contains(object) boolean containsall(object) boolean isempty() Iterator iterator() - zwraca iterator boolean remove(object) boolean removeall(collection) - usuwa wszystkie elementy kontenera, bêd¹ce równie w przekazanym kontenerze - argumencie boolean retainall(collection) - przeciêcie w teorii zbiorów int size() Object[] toarray() nie ma swobodnego dostêpu - jeœli chcemy obejrzeæ wszystkie elementy kontenera, trzeba u yæ iteratora. Paulina Strzelecka, Tomasz Roszkowski 19

Interfejs List Dwa rodzaje List: podstawowa ArrayList (najlepsza w przypadku swobodnego dostêpu do elementu) LinkedList (posiada znacznie bardziej uniwersalny zestaw metod) List (interfejs) - kolejnoœæ - najwa niejsza cecha implementacji. Interfejs List dodaje wiele metod do interfejsu Collection - wstawianie i usuwanie ze œrodka listy (zalecane tylko dla LinkedList). Z listy mo na uzyskaæ ListIterator, a dziêki niemu przegl¹daæ listê w dwie strony. ArrayList - implementacja interfejsu List jako tablicy. Szybki i swobodny dostêp do elementów, ale wolniejsza przy wstawianiu i usuwaniu z wnêtrza listy. List-Iterator powinien byæ u ywany tylko do przemieszczania siê po ArrayList, nie do wstawiania i usuwania elementów. LinkedList - zapewnia optymalny dostêp sekwencyjny oraz tanie usuwanie i wstawianie.powolna w przypadku dostêpu swobodnego. Posiada metody: addfirst(), addlast(), getfirst(), getlast(), removefirst(), removelast() pozwalaj¹ce na u ycie jej jako stosu, kolejki lub kolejki dwukierunkowej. Paulina Strzelecka, Tomasz Roszkowski 20

Stos na podstawie LinkedList LinkedList zawiera metody, które bezpoœrednio wprowadzaj¹ funkcje stosu, wiêc zamiast tworzyæ klasê stosu mo na u yæ tej klasy Jeœli chcemy uzyskaæ jedynie zachowanie stosu, to nie powinniœmy dziedziczyæ po klasie LinkedList, bo dostalibyœmy klasê z ca³¹ reszt¹ metod klasy LinkedList (projektanci klasy Stack z Java 1.0 pope³nili taki "b³¹d"). Kolejka na podstawie LinkedList LinkedList zawiera metody odpowiadaj¹ce zachowaniu kolejki. Paulina Strzelecka, Tomasz Roszkowski 21

Interfejs Set Set posiada ten sam interfejs co Collection, nie posiada adnych dodatkowych funkcji. Mimo tego zachowuje siê inaczej. Nie pozwala na przechowywanie wiêcej ni jednego egzemplarza wartoœci ka dego z obiektów. Set(interfejs) - ka dy z elementów dodawanych do zbioru musi byæ unikatowy. Elementy Object zamieszczone w Set musz¹ definiowaæ metodê equals(), by ustaliæ ich unikatowoœæ. Zbiór Set ma dok³adnie te same metody co Collection. HashSet - dla zbiorów, dla których istotny jest krótki czas lokalizacji elementu. TreeSet - zbiór uporz¹dkowany na podstawie drzewa. Dziêki niemu mo na pobieraæ uporz¹dkowany ci¹g elementów. Paulina Strzelecka, Tomasz Roszkowski 22

Interfejs Map (odwzorowanie, s³ownik, tablica asocjacyjna) put( Object klucz, Object wartosc) get(object klucz) containskey() containsvalue() Dwa typy odwzorowañ Map: HashMap TreeMap Maj¹ ten sam interfejs. Ró nica - wydajnoœæ. Paulina Strzelecka, Tomasz Roszkowski 23

Interfejs Map Przyspieszenie poszukiwania klucza zapewnia HashMap ( stosuje specjaln¹ wartoœæ zwan¹ kodem haszuj¹cym). Kod haszuj¹cy to sposób na pobranie pewnych informacji w obiekcie i zamianê w "unikatow¹" wartoœæ typu int. Wszystkie obiekty Javy mog¹ udostêpniaæ swój kod haszuj¹cy - metoda hashcode() z Object. Map (interfejs) -przechowuje stowarzyszone pary klucz-wartoœæ, mo na odnaleÿæ wartoœæ podaj¹c klucz. HashMap - implementacja oparta na tablicy haszuj¹cej. Zapewnia wstawianie i lokalizacjê par w sta³ym czasie. TreeMap - implementacja oparta na drzewach czerwono-czarnych. Kiedy wypiszemy klucze lub zamieszczone pary, bêd¹ one posortowane. Jest to jedyne odwzorowanie posiadaj¹ce metodê sumap(), która pozwala uzyskaæ fragment drzewa. Paulina Strzelecka, Tomasz Roszkowski 24

Wybór implementacji Hashtable, Vektor i Stack - stare klasy, lepiej ich nie u ywaæ w nowych programach. Paulina Strzelecka, Tomasz Roszkowski 25

Wybór miêdzy listami tablice s¹ szybsze od ka dego z kontenerów w przypadku swobodnego przegl¹dania i wyszukiwania dostêp swobodny ( get()) nie jest zbyt kosztowny w przypadku ArrayList i bardzo kosztowny dla LinkedList wstawianie i usuwanie ze œrodka listy jest tañsze dla LinkedList ni dla ArrayList (szczególnie usuwanie) Vektor nie jest tak szybki jak ArrayList i jego stosowania powinno siê unikaæ Paulina Strzelecka, Tomasz Roszkowski 26

Wybór implementacji zbioru TreeSet HashSet ( je eli potrzebujemy uzyskaæ uporz¹dkowan¹ sekwencjê to nale y stosowaæ TreeSet) HashSet ogólnie wypada lepiej ni TreeSet we wszystkich operacjach ( szczególnie dodawania i wyszukiwania) Jedynym powodem istnienia TreeSet jest to, e utrzymuje on elementy posortowane. Paulina Strzelecka, Tomasz Roszkowski 27

Wybór implementacji odwzorowania wydajnoœæ Hashtable jest mniej wiêcej równa z HashMap (HashMap jest trochê szybsza) TreeMap jest wolniejsza od HashMap (mo na j¹ jednak wykorzystaæ jako sposób na stworzenie listy uporz¹dkowanej) Ogólnie: Stosuj¹c odwzorowania Map jako pierwsz¹ powinno siê wybraæ implementacjê HashMap i tylko wtedy, gdy wymagane jest stale posortowane odwzorowanie, wybraæ TreeMap. Paulina Strzelecka, Tomasz Roszkowski 28

Atrybut obiektu Mo e byæ ró ny dla ka dego z obiektów klasy Mo e mieæ jeden z modyfikatorów dostêpu : - private - dostêpny wy³¹cznie w klasie bazowej obiektu - protected dostêpny w klasie bazowej i w klasach rozszerzaj¹cych klasê bazow¹ - bez modyfikatora - tzw, dostêp przyjazny, dostêpny dla ka dej klasy w ramach tego samego pakietu - public - dostêpny dla ka dej klasy Mo e byæ dowolnego typu podstawowego, b¹dÿ klasy (równie klasy z której pochodzi) abstract class Osoba { private String imiê, nazwisko; protected Osoba[] rodzice; public long pesel; } Paulina Strzelecka, Tomasz Roszkowski 29

Atrybut klasowy Jednakowy dla wszystkich obiektów klasy Po modyfikatorze dostêpu s³owo kluczowe static Alternatywnie mo e byæ zrealizowany w klasie realizuj¹cej ekstensjê (kontenerze), wtedy dla kontenera jest to atrybut obiektu class Pracownik { private static String firma = "PJWSTK"; } class Pracownicy { private ArrayList pracownicy = new ArrayList (); private String firma= "PJWSTK"; } Paulina Strzelecka, Tomasz Roszkowski 30

Metoda obiektu Wywo³ywana na rzecz konkretnego obiektu x klasy Nie wymaga przegl¹dania ekstensji klasy Modyfikatory dostêpu jak dla atrybutu obiektu public void wyswietldane() { System.out.println("Imiê :" + imiê); System.out.println("Nazwisko : " + nazwisko); System.out.println("PESEL : + pesel); } Paulina Strzelecka, Tomasz Roszkowski 31

Metoda klasowa Wywo³ywana na rzecz klasy nie obiektu Wymaga przejrzenia ca³ej ekstensji klasy Realizacja w klasie kontenerowej Alternatywnie mo e byæ zrealizowana w klasie bazowej za pomoc¹ s³owa kluczowego static po modyfikatorze dostêpu, ale nale y jej przekazaæ obiekt lub obiekty jako argumenty wywo³ania class Pracownicy { private ArrayList pracownicy = new ArrayList(); public Pracownik maxsalary() { Iterator e = pracownicy.iterator(); Pracownik max = ((Pracownik)e.next()); while(e.hasnext()) { if(((pracownik)e.next()).wynagrodzenie() > max.wynagrodzenie()) max = ((Pracownik)e.next()); } return max; } Paulina Strzelecka, Tomasz Roszkowski 32

Polimorfizm Wymaga dziedziczenia Pozwala na ró n¹ realizacjê tej samej metody w klasie bazowej i jej klasach pochodnych Nale y rozró niæ przes³anianie - redefiniowanie metody, od przeci¹ ania - redeklaracji metody Metoda w klasie bazowej mo e byæ abstrakcyjna (s³owo kluczowe abstract za modyfikatorem dostêpu) - wtedy w klasie bazowej znajduje siê jedynie deklaracja metody, a definicja musi siê znajdowaæ w ka dej klasie rozszerzaj¹cej klasê bazow¹ Je eli w klasie znajduje siê co najmniej jedna metoda abstrakcyjna, to klasa równie staje siê abstrakcyjna - w konsekwencji kompilator wymusi na nas u ycie s³owa kluczowego abstract przy deklaracji klasy Nie mo na utworzyæ obiektu klasy abstrakcyjnej class Osoba { public void wyswietldane() { System.out.println("Imiê :" + imiê); System.out.println("Nazwisko : " + nazwisko); System.out.println("PESEL : + pesel); } } class Pracownik extends Osoba { public void wyswietldane() { ((Osoba)this).wyswietlDane(); System.out.println("Pensja: " + pensja); } } Paulina Strzelecka, Tomasz Roszkowski 33

ród³a: "Thinking in Java" - Bruce Eckel (w przewa aj¹cym stopniu informacje zawarte w prezentacji pochodz¹ z tego w³aœnie Ÿród³a) inwencja w³asna Paulina Strzelecka, Tomasz Roszkowski 34