[PL] Wstęp do programowania w Javie dla kompletnych laików #7 - zapoznanie się z konstruktorami klas

in polish •  7 years ago  (edited)

Cześć,
dzisiaj chciałbym zapoznać was z pojęciem konstruktora.

Jeżeli widzisz tę serię po raz pierwszy, to zapraszam do zapoznania się z poprzednią częścią serii: Klik

Czym więc jest konstruktor?
Konstruktor jest to tak naprawdę metoda, która się wywołuje przy stworzeniu obiektu. (Przypominam, że obiekt to jest reprezentant klasy) A kiedy obiekt się tworzy? Tworzy się on kiedy deklarujemy(tworzymy) zmienną, gdzie typem zmiennej jest napisana klasa z konstruktorem. Brzmi to skomplikowanie? Spójrzmy zatem na kod, żeby trochę to rozjaśnić:

public class ClassWithConstructor {

    private final String text;

    public ClassWithConstructor(String text) {
        this.text = text;
    }
    
    public String printSavedMessage() {
        return this.text;
    }
}

Jak widzimy w naszej klasie o nazwie "ClassWithConstructor" mamy zmienną, która jest widoczna tylko wewnątrz klasy, jest typu tekstowego i ma nazwę "text". Poniżej znajduje się konstruktor klasy.
Konstruktor może być widoczny wewnątrz klasy lub może być widoczny wszędzie. Jest jeszcze konstruktor chroniony, ale o nim nie będę pisał.
Muszę też wspomnieć, że każda klasa ma zawsze konstruktor domyślny. Oznacza to, że bez względu czy ty go świadomie napiszesz w kodzie, czy nie napiszesz go. Przy tworzeniu obiektu zawsze wykona się konstruktor domyślny bez żadnych parametrów "startowych".
Jeżeli chcemy aby nasz obiekt przy tworzeniu akceptował tylko nasz inny konstruktor zawierający jakieś parametry, to wtedy wpisujemy konstruktor bez parametrów i ustawiamy mu widoczność jako prywatny w taki sposób:

    private ClassWithConstructor() {  }

Wróćmy może do naszej klasy, gdzie mamy konstruktor z jednym parametrem wejściowym.
Nasz konstruktor przyjmuje parametr, który jest zmienną typu String o nazwie tekst i przypisuje wartość tej zmiennej do innej zmiennej znajdującej się w klasie. Jak możecie zauważyć zmienna w parametrze oraz zmienna w klasie(zwana polem) posiadają identyczną nazwę. No to jak nasze środowisko ma rozróżnić do jakiej zmiennej się chcemy odwołać?
Bardzo prosto. Jeżeli chcemy się odwołać do pola w klasie, to używamy magicznego wyrażenia this.
this możemy przetłumaczyć jako "odwołując się do tej klasy". Czyli w naszym przypadku odwołując się do klasy ClassWithConstruktor, weź zmienną text i wpisz do niej zawartość ze zmiennej text znajdującej się w parametrze konsturktora.
Wciąż wydaje się trudne?
No to może powiem wam co ta klasa generalnie robi, to może poczujecie bluesa ;)
Klasa ClassWithConstructor oczekuje przy tworzeniu obiektu, że ktoś jej poda pewien napis, a następnie użyje metody printSavedMessage do wyświetlenia napisu jaki został dostarczony poprzez konstruktor.
To teraz zobaczmy jak użyć tej klasy w głównej metodzie main:

public static void main(String[] args) {
    ClassWithConstructor niceVariable = new ClassWithConstructor("Nikt tego nie zobaczy jak nie uzyje odpowiedniej metody!!!");
    System.out.println(niceVariable);
}

Powyższy kod powinien wyświetlić na ekranie napis "Nikt tego nie zobaczy jak nie uzyje odpowiedniej metody!!!"
Skoro wiecie już jak tworzyć konstruktory, dzięki którym możecie przekazać dane bezpośrednio do obiektu, to wykonajcie proste zadanie.
Przekażcie obiektowi dwie liczby i stwórzcie metodę w klasie, która będzie zwracała sumę tych liczb. Na końcu wyświetlcie je na ekranie tak "Wylosowania liczba to <tuJakaśLiczba>"
Swój kod możecie zalinkować w komentarzach.

Dodam tu tylko jak ta klasa z konstruktorem wygląda w kodzie:
cons.PNG

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!