Programowanie w języku Java - Klasy
Transkrypt
Programowanie w języku Java - Klasy
Programowanie w języku Java Klasy v1.00 130203 Klasy Klasa jest przepisem na obiekt. Aby utworzyć obiekt pewnej klasy należy użyć definicji klasy. Elementami składowymi klasy są: zmienne – elementy, które wyróżniają poszczególne obiekty klasy, metody – elementy, które określają działania, jakie można wykonywać na zmiennych Zmienne w definicji klasy Każdy obiekt danej klasy jest instancją tej klasy i zawiera wszystkie elementy (zmienne i metody) danej klasy. Zmienne zdefiniowane w klasie można podzielić na: zmienne instancyjne – każda instancja klasy ma swoją kopię zmiennych instancyjnych. Wartości tych zmiennych wyróżniają obiekty spośród innych obiektów. zmienne klasowe – są wspólne dla wszystkich instancji danej klasy. Istnieją nawet wtedy, gdy nie istnieje żadna instancja danej klasy. Metody klasy mogą modyfikować zmienne klasowe, ale wtedy zmienna ta jest widoczna we wszystkich instancjach klasy. Zmienne klasowe muszą być zadeklarowane ze słowem kluczowym static. Przykład class Kolo { public static double PI = 3.14; double x; double y; double r; } Zmienna PI powinna mieć tę samą wartość dla wszystkich kół, zatem została ona zadeklarowana jako zmienna klasowa. Metody w definicji klasy Podobnie jak w przypadku zmiennych istnieją metody klasowe i metody instancyjne. Metody klasowe są wspólne dla wszystkich obiektów danej klasy. Można z nich korzystać nawet jeśli nie istnieje żaden obiekt danej klasy. Metody klasowe nie mogą operować na zmiennych instancyjnych. Możemy zdefiniować poprzedni przykład w następujący sposób: class Kolo { public static final double PI = 3.14; double x; double y; double r; static int licznikkol = 0; static int ileKol() { return licznikKol; } } 1z2 Programowanie w języku Java Klasy v1.00 130203 Definiowanie metod. Ogólna deklaracja metody wygląda następująco: atrybut_dostępu typ_wyniku nazwa (lista argumentów) { // implementacja metody } Każda metoda musi mieć określony typ zwracanego wyniku. Jeśli metoda nie zwraca wyniku to typ_wyniku musi być zadeklarowany jako void. Przed typem wyniku możemy podać atrybut_dostępu do danej metody. Atrybut ten określa czy metoda będzie dostępna z innych klas, klas potomnych i innych pakietów. Jeśli metoda nie posiada listy argumentów to należy zapisać puste nawiasy po nazwie metody, np.:. ileKol(). Jeśli zadeklarowaliśmy metodę z typem wyniku różnym od void, to metoda musi zwrócić wartość zadeklarowanego typu. Wartość ta jest zwracana słowem kluczowym return. Każda taka metoda musi zawierać przynajmniej jedno wystąpienie return. W Java zmienne typów podstawowych przekazywane są przez wartość. Natomiast zmienne pozostałych typów przez zmienną. Oznacza to, że jeśli metoda zmodyfikuje argument to modyfikuje również oryginalny obiekt. Jeśli chcemy przekazać typy podstawowe przez zmienną musimy utworzyć dla zmiennych typów podstawowych odpowiednią zmienna typu obiektowego. Przykład Jeśli mamy daną metodę klasy Kolo: double obliczPole() { return 2*Math.PI*r;} to wywołanie metody dla obiektu klasy Kolo wygląda następująco: kolo.obliczPole(); Aby uzyskać dostęp do zmiennej r konkretnego obiektu kolo klasy Kolo kompilator zastępuje r przez this.r. W niektórych sytuacjach programista może, a nawet musi użyć jawnie słowa kluczowego this. Zmienna this wskazuje na aktualny obiekt. Zadanie Dokończyć implementacje klasy Kolo, tzn. zaimplementować metodę obliczPole() oraz obliczObwod() oraz napisać program sprawdzający poprawność działania klasy. 2z2