Programowanie obiektowe w Javie Nguyen Hung Son Uniwersytet Warszawski
Spis rzeczy Klasy Metody i pola Dziedziczenie klas Interfejsy Programowanie obiektowo-zorientowane w Javie
Klasy Klasy są szablonami dla obiektów abstract final public private Synchronizable ... SKŁADNIA KLAS [ModyfikatorKlasy] class NazwaKlasy [extends NadKlasa] [implements Interfejsy] { /* definicje metod i pól */ } Pola: Modyfikator TypWartości NazwaPola Metody: Modyfikator TypZwracanejWartości Nazwa (Typ Argument1, Typ Argument2, ...) { /* implementacja (kod) metody */ }
Modyfikator TypWartości NazwaPola Pola danych Deklaracja: Modyfikator TypWartości NazwaPola Przykład: class Punkt { int m_iWspX; //pole reprezentujące współrzędną x punktu int m_iWspY; //pole reprezentujące współrzędną y punktu byte m_bKolor; //pole reprezentujące kolor punktu }
Metody Deklaracja Przykład Modyfikator TypWartości Nazwa(Typ Argument1, Typ Argument2, ...) { /* implementacja (kod) metody */ } Przykład class Punkt { ...... public void info() System.out.println(”To jest punkt (” + m_iWspX +”,” + m_iWspY+”)”);
Modyfikatory Modyfikatory dostępu Modyfikatory właściwości Dla klas możemy używać modyfikatorów: public, abstract, final. dla metod: abstract, static, final, synchronized, native; dla pól danych: final, static, transient, volatile, Modyfikator klasa podklasa pakiet wszędzie private protected public package X
NazwaKlasy NazwaZmiennej [ = WartośćPoczątkowa ]; Obiekty Obiekty = elementy pewnego typu danych opisanego przez klasy. Zmienne obiektowe = referencje do obiektów Konstruktor: metoda o nazwie identycznej, jak nazwa klasy. Konstruktor zostaje wywołany podczas tworzenia nowego obiektu klasy Deklaracja: NazwaKlasy NazwaZmiennej [ = WartośćPoczątkowa ]; Przykład: Punkt p = new Punkt(2,3,4);
Dziedziczenie Nieprywatne (private) pola i metody klasy mogą być dziedziczone przez inną klasę super: wskaźnik do nadklasy W Javie z jednej klasy bazowej może dziedziczyć wiele klas pochodnych, ale każda klasa może dziedziczyć z 1 klasy bazowej (brak polimorfizmu)
Dziedziczenie class Figura // klasa bazowa { protected byte Kolor; // kolor protected int x0,y0; // współrzêdne x,y punktu protected int bx,by; // wsp. punktu odniesienia // konstruktor dla inicjalizacji protected Figura (byte f, int x, int y) this.Kolor=f; this.x0=x; this.y0=y; this.UstawPunktOdniesienia(0, 0); } // metoda ustawiająca punkt odniesienia figury public UstawPunktOdniesienia (int x, int y) // abstrakcyjna metoda rysująca figurę public abstract void Rysuj (); class Linia extends Figura // Ta klasa została utworzona z klasy bazowej "Figura". { // dodatkowe współrzędne x, y końcowego punktu linii protected int x1, y1; // konstruktor - inicjalizacja linii public Linia (byte f, int xo_, int y0_, int x1_, int y1_) super(c, x0_, y0_); // wywołanie konstruktora klasy bazowej this.x1=x1_; this.y1=y1_; } // implementacja abstrakcyjnej metody klasy bazowej public void Rysuj() // ... wyświetlenie linii na ekranie
Dziedziczenie w Javie Każda klasa ma jedną nadklasę (wyjątek: Object)
Interfejs Interface: prototyp klas Klasy, które implementują ten sam interface, mają podobne struktury. W interface: Pola są statyczne, finalne i publiczne Metody są publiczne i abstrakcyjne (które zostaną implementowane w klasach pochodnych)
Implementacja interfeju Interface może oddziedziczyć od innego interface lecz nie od innych klas Klasy mogą dziedziczyć od jednej klasy, ale może implementować wiele interfejsów
Pakiety są to podzbiory bibliotek, zawierają przeważnie funkcje związane tematycznie. Pakiety mogą także zawierać definicje interfejsów.