Konstruktory

Konstruktor to fragment kodu klasy uruchamiany w trakcie tworzenia instancji tej klasy. Implementując konstruktor określamy listę argumentów oraz ciało konstruktora. Ciało konstruktora to ciąg instrukcji których celem jest zainicjowanie stanu nowo tworzonego obiektu. Definicja konstruktora ma następującą postać:

{modyfikator dostępu} {nazwa klasy} ( {lista argumentów} ) {
  {ciało konstruktora}
}

Definicję konstruktora umieszczamy w klasie tak jak definicję metod czy zmiennych. Konstruktory – w przeciwieństwie do metod – nie posiadają nazwy. W miejscu w którym w przypadku metod podajemy nazwę metody tu piszemy nazwę klasy, przez co oznaczamy że jest to konstruktor tej klasy. Konstruktory nie zwracają też żadnej wartości. Jedynym celem konstruktorów jest bowiem inicjalizacja stanu nowo tworzonego obiektu.

O to czym jest {modyfikator dostępu} póki co się nie martwmy. Wszystkiego dowiemy się w swoim czasie. Póki co możemy używać zawsze modyfikatora public.

Przykładowo, jeślibyśmy chcieli zaimplementować własną klasę reprezentującą pliki dyskowe, która to klasa miałaby dwie zmienne: jedną oznaczającą nazwę pliku i drugą oznaczającą ścieżkę dostępu do katalogu w którym ten plik się znajduje, a ponadto  klasa ta miałaby mieć konstruktor dwu argumentowy dla inicjalizacji tych zmiennych, to moglibyśmy napisać:

class File {
  String filePath;
  String fileName;
  
  public File(String filePath, String fileName) {
    this.filePath = filePath;
    this.fileName = fileName;
  }
}

Konstruktor naszej klasy przepisuje po prostu wartości przekazane w trakcie tworzenia obiektu do zmiennych zdefiniowanych w klasie (tj. zmiennych tworzonego obiektu). Jest to typowy przykład konstruktora. Aby utworzyć instancję tej klasy reprezentującą plik o nazwie file.txt znajdujący się w katalogu C:/mydir  i przypisać ten obiekt do zmiennej o nazwie myFile typu File zdefiniowanego powyżej napiszemy:

File file = new File("C:/mydir", "file.txt");

Zwróćmy jeszcze uwagę na zastosowanie słówka kluczowego this w powyższym kodzie. W ciele konstruktora mamy widoczne dwie zmienne o nazwie fileName i dwie zmienne o nazwie filePath. Mamy zmienne lokalne, zadeklarowane jako parametr wywołania konstruktora oraz zmienne zadeklarowane w klasie. Jeśli posłużymy się samą nazwą zmiennej, to będzie to odwołanie do zmiennej lokalnej. Aby wskazać, że chodzi nam o zmienną z obiektu, musimy posłużyć się referencją do tego obiektu. W tym przypadku chcemy odwołać się do obiektu dla którego wykonuje się kod konstruktora a więc możemy posłużyć się słówkiem kluczowym this. Oczywiście moglibyśmy użyć innych nazw dla parametrów wywołania konstruktora i innych dla zmiennych obiektu – wtedy nie było by problemu określania o które zmienne nam chodzi. Powyższy kod możemy więc przepisać bez użycia wskaźnika this jak poniżej:

class File {
  String filePath;
  String fileName;
  
  public File(String path, String name) {
    filePath = path;
    fileName = name;
  }
}
0 0 votes
Daj ocenę