CodeGym /Kursy /Składnia Java /Konstruktory

Konstruktory

Składnia Java
Poziom 5 , Lekcja 8
Dostępny

– 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.

Komentarze (6)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
StreetRatFroggy Poziom 7, Poznan, Poland
21 stycznia 2024
Czemu BASIA mówi jak mężczyzna? cytuję " Najwyższy czas, abym opowiedział Ci o konstruktorach."
Dawid Poziom 10, Poland
6 grudnia 2023
Wszystko spoczko tylko jedna malutka rzecz. 1. Nazwa konstruktora jest taka sama, jak nazwa klasy (zamiast inicjalizuj). To jest widoczne, nie ma problemu. 2. Konstruktor nie ma typu (nie wskazuje się żadnego typu). Mógłby ktoś wytłumaczyć o co w tym chodzi? z tego co widzę inicjalizator wskazuję typ np (String imie) a w linijce z konstruktorem też takie coś widnieje.
owlek Poziom 6, Polska, Poland
18 grudnia 2023
sygnatura metody musi zawierac typ zwracany lub void np. public int licz(int a, int b) public void inicjalizuj(String imie, string wiek) natomiast pisząc konstruktor nie piszemy typu zwracanego np. public Kot(String imie, int wiek) <- nazwą metody jest nazwa klasy, ale przed nazwą nie ma żadnego typu
Przemo Poziom 17, Legnica, Poland
20 grudnia 2023
Typy są w parametrze, ale metoda nie ma żadnego typu. Ma po prostu nazwę klasy.
Sebastian Poziom 18
29 lipca 2020
Here is a mistake: plik.inicjalizuj("c:\data\a.txt"); Should be: plik.inicjalizuj("c:\\data\\a.txt");
Karol Poziom 8, Poland, Poland
12 września 2021
Bravo Kuba