Programowanie obiektowe w Javie Nguyen Hung Son Uniwersytet Warszawski Spis rzeczy Klasy Metody i pola Dziedziczenie klas Interfejsy Programowanie obiektowozorientowane w Javie Klasy Klasy są szablonami dla obiektów SKŁADNIA KLAS [ModyfikatorKlasy] class NazwaKlasy [extends NadKlasa] [implements Interfejsy] { /* definicje metod i pól */ } abstract final public private Synchronizable ... Pola: Modyfikator TypWartości NazwaPola Metody: Modyfikator TypZwracanejWartości Nazwa (Typ Argument1, Typ Argument2, ...) { /* implementacja (kod) metody */ } 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 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 Modyfikator private protected public package klasa podklasa pakiet wszędzie X X X X X X X X X X 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, 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 } 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 dla inicjalizacji protected Figura (byte f, int x, int y) { this.Kolor=f; this.x0=x; this.y0=y; this.UstawPunktOdniesienia(0, 0); } // 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_; } // metoda ustawiająca punkt odniesienia figury public UstawPunktOdniesienia (int x, int y) { this.x0=x; this.y0=y; } // abstrakcyjna metoda rysująca figurę public abstract void Rysuj (); // 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.