73 lines
3.3 KiB
Plaintext
73 lines
3.3 KiB
Plaintext
\b;Instrukcja \c;class\n;
|
|
Pozwala na zadeklarowanie definicji klasy, przy użyciu następującej składni:
|
|
\c;
|
|
\s;public class NazwaKlasy
|
|
\s;{
|
|
\s; deklaracje;
|
|
\s;}
|
|
\n;
|
|
Klasy mogą być tylko typu \l;public\u cbot\public; (publiczne), a więc mogą być używane podczas misji przez wszystkie roboty. Elementy klasy również są publiczne, dostępne spoza klasy. Do klasy mogą należeć pola lub funkcje (zwane również metodami), na przykład następująca klasa \c;MojaKlasa\n; zawiera 4 pola (a, b, x oraz s) i jedną metodę (MojaFunkcja).
|
|
\c;
|
|
\s;public class MojaKlasa
|
|
\s;{
|
|
\s; int a, b;
|
|
\s; float x = 3.33;
|
|
\s; string s = "Cześć";
|
|
\s; float MojaFunkcja( float value )
|
|
\s; {
|
|
\s; return (value*x)-1;
|
|
\s; }
|
|
\s;}
|
|
\n;
|
|
Jak pokazano na tym przykładzie, elementy klasy mogą być inicjalizowane (\c;x=3.33\n;). Można też zdefiniować konstruktor, który jest specjalną metodą o nazwie takiej samej jak nazwa klasy. Metoda ta jest wywoływana automatycznie podczas tworzenia instancji klasy. Możliwe jest również zadeklarowanie więcej niż jednej metody o tej samej nazwie ale o innych parametrach.
|
|
\c;
|
|
\s;public class MojaKlasa
|
|
\s;{
|
|
\s; int a, b;
|
|
\s; void MojaKlasa( )
|
|
\s; {
|
|
\s; a = 2; b = 3;
|
|
\s; }
|
|
\s; void MojaKlasa( int a, int b )
|
|
\s; {
|
|
\s; this.a = a; this.b = b;
|
|
\s; }
|
|
\s;}
|
|
\n;
|
|
W tym przykładzie zadeklarowano dwa konstruktory dla klasy \c;MojaKlasa\n;, jeden bez parametrów, drugi z dwoma parametrami. Jako że nazwy parametrów drugiego konstruktora są takie same jak nazwy dwóch pól klasy \c;a\n; et \c;b\n; konieczne jest użycie \c;\l;this\u cbot\this;.a\n; i \c;\l;this\u cbot\this;.b\n; w celu rozróżnienia parametrów. Inne, prostsze rozwiązanie, to nadanie różnych nazw parametrom.
|
|
\c;
|
|
\s;void Test( )
|
|
\s;{
|
|
\s; MojaKlasa element1(); // konstruktor bez parametrów
|
|
\s; MojaKlasa element2(4, 5); // konstruktor z 2 parametrami
|
|
\s; MojaKlasa element3; // konstruktor nie jest wywoływany,
|
|
\s; // więc item3 == null
|
|
\s;}
|
|
\n;
|
|
Można też zdefinować destruktor. Musi to być funkcja \c;void\n; bez parametrów o takiej samej nazwie jak nazwa klasy, poprzedzona znakiem ~. Destruktor jest wywoływany automatycznie gdy nie ma już żadnych odwołań do instancji klasy.
|
|
\c;
|
|
\s;public class MojaKlasa
|
|
\s;{
|
|
\s; static private int licznik = 0; // licznik instancji
|
|
\s; void MojaKlasa( )
|
|
\s; {
|
|
\s; licznik ++; // jedna instancja więcej
|
|
\s; }
|
|
\s; void ~MojaKlasa( )
|
|
\s; {
|
|
\s; licznik --; // jedna instancja mniej
|
|
\s; }
|
|
\s;}
|
|
\s;void Test()
|
|
\s;{
|
|
\s; MojaKlasa element1( ); // licznik = 1
|
|
\s; MojaKlasa element2( ); // licznik = 2
|
|
\s; element1 = null; // licznik = 1
|
|
\s;} // licznik = 0
|
|
\n;
|
|
W przypadku przekazywania instancji klasy jako parametru \l;funkcji\u cbot\function;, otrzymuje ona tylko \l;wskaźnik\u cbot\pointer; do instancji. Oznacza to, że jeśli zostanie zmodyfikowana instancja wewnątrz funkcji, w rzeczywistości zostanie zmodyfikowana instancja przekazana funkcji.
|
|
|
|
\t;Zobacz również
|
|
\c;\l;public\u cbot\public;\n;, \c;\l;private\u cbot\private;\n;, \c;\l;static\u cbot\static;\n;, \c;\l;synchronized\u cbot\synchro;\n;, \c;\l;new\u cbot\new;\n;, \c;\l;wskaźnik\u cbot\pointer;\n;, \c;\l;this\u cbot\this;\n;
|
|
\l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.
|