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.