– Najwyższy czas, abym opowiedział Ci o konstruktorach. To naprawdę prosta koncepcja. Programistom udało się wynaleźć szybki sposób tworzenia i inicjalizowania obiektów.

Bez konstruktora Z konstruktorem
MojPlik plik = new MojPlik();
plik.inicjalizuj("c:\data\a.txt");
String tekst = plik.readTekst();
MojPlik plik = new MojPlik("c:\data\a.txt");
String tekst = plik.readTekst();
MojPlik plik = new MojPlik();
plik.inicjalizuj("c:\data\", "a.txt");
String tekst = plik.readTekst();
MojPlik plik = new MojPlik("c:\data\", "a.txt");
String tekst = plik.readTekst();
MojPlik plik = new MojPlik();
plik.inicjalizuj("c:\data\a.txt");

MojPlik plik2 = new MojPlik();
plik2.inicjalizuj(MojPlik plik, "a.txt");
String tekst = plik2.readTekst();
MojPlik plik = new MojPlik("c:\data\a.txt");


MojPlik plik2 = new MojPlik(plik, "a.txt");
String tekst = plik2.readTekst();

– Moja nauka o metodzie inicjalizuj właśnie się zakończyła...

– Przyjrzyj się temu. Przy użyciu konstruktorów kod jest wygodniejszy i bardziej kompaktowy.

– Zgadza się. Mam pytanie. Wiem już, jak napisać metodę inicjalizuj wewnątrz klasy, ale jak mam napisać konstruktor?

– Po pierwsze, spójrz na ten przykład:

Bez konstruktora Z konstruktorem
class MojPlik
{
  private String nazwapliku = null;

  public void inicjalizuj(String nazwa)
  {
    this.nazwapliku = nazwa;
  }

  public void inicjalizuj(String folder, String nazwa)
  {
    this.nazwapliku = folder + nazwa;
  }

  public void inicjalizuj(MojPlik plik, String nazwa)
  {
    this.nazwapliku = plik.getFolder() + nazwa;
  }

...
}
class MojPlik
{
  private String nazwapliku = null;

  public MojPlik(String nazwa)
  {
    this.nazwapliku = nazwa;
  }

  public MojPlik(String folder, String nazwa)
  {
    this.nazwapliku = folder + nazwa;
  }

  public MojPlik(MojPlik plik, String nazwa)
  {
    this.nazwapliku = plik.getFolder() + nazwa;
  }

...
}

– Deklaracja konstruktora wewnątrz klasy jest prosta. Konstruktor jest podobny do metody inicjalizuj, są między nimi tylko dwie różnice:

1. Nazwa konstruktora jest taka sama, jak nazwa klasy (zamiast inicjalizuj).

2. Konstruktor nie ma typu (nie wskazuje się żadnego typu).

– OK, to rzeczywiście jak inicjalizuj, z drobnymi różnicami. Myślę, że rozumiem.