• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Działanie konstruktorów

VPS Starter Arubacloud
0 głosów
375 wizyt
pytanie zadane 15 grudnia 2017 w Java przez rubesom Obywatel (1,690 p.)

Mam problem ze zrozumieniem jak działaja konstruktory w takim przypadku:

public class Piosenka {
String tytul;
public Piosenka (String t) {
tytul = t;
}
public void odtworz() {
Odtwarzacz odtwarzacz = new Odtwarzacz();
odtwarzacz.odtworz(tytul);
}
}

W tym przypadku zdefiniowany jest konstruktor dla klasy "Piosenka" ustawiający pole "tytul" (taki seter/mutator). 

Ale w dalszej części kodu w klasie "Piosenka" wywołuję metodę "odwtorz" na rzecz zmiennej referencyjnej odnoszącej się do klady "Odtwarzacz" i ten obiekt jest tworzony na podstawie konstruktora z tej klasy (Odtwarzacz)? Wywołanie tej metody ("odtworz")) nie ma nic wspólnego z polem "tytul" klasy "Piosenka"?

 

Jest to przykład z książki "Java Rusz Głową" nie wiem czy dobrze to rozumiem. Obawiam się, że gdzies dałem ciała przy czytaniu tej książki.

1 odpowiedź

+1 głos
odpowiedź 15 grudnia 2017 przez Aleksander Januszews Gaduła (3,790 p.)
wybrane 15 grudnia 2017 przez rubesom
 
Najlepsza

W klasie Odtwarzacz znajduje się metoda publiczna odtworz z parametrem String, która zostaje wywołana przez utworzony obiekt klasy Odtwarzacz w metodzie odtworz klasy Piosenka. 

Klasa Odtwarzacz może wyglądać np. tak:

public class Odtwarzacz
{
...

public void odtworz(String t)
{
    // cos tam robi

}

...
}

Jeżeli klasa nie posiada zdefiniowanego konstruktora to w trakcie kompilacji automatycznie tworzony jest konstruktor bezparametrowy, który pozwala na utworzenie obiektu.

komentarz 15 grudnia 2017 przez rubesom Obywatel (1,690 p.)

Dziwi mnie podanie w tym przykładzie konstruktora dla klasy "Piosenka" i pola "tytul":
 

public Piosenka (String t) {
tytul = t;

Ten konstruktor nie jest wykorzystywany w tym przykładzie, dobrze rozumiem?

Tak jak napisałeś przy użyciu metody "odtworz" i tworzeniu obiektu klasy "Odtwarzacz":

Odtwarzacz odtwarzacz = new Odtwarzacz();
odtwarzacz.odtworz(tytul);

korzystam z metody klasy "Odtwarzacz" i tak samo z jego konstruktora (nie ważne czy domyślnego czy zdefiniowanego), dobrze rozumiem? Nie jest wykorzystywany w tym przypadku konstruktor klasy "Piosenka" i jego pole "tytul"?

 

 

komentarz 15 grudnia 2017 przez Aleksander Januszews Gaduła (3,790 p.)
edycja 15 grudnia 2017 przez Aleksander Januszews

Nie, konstruktor jest wywoływany podczas tworzenia instancji(obiektu). W przypadku wywołania metody z klasy Odtwarzacz w metodzie odtworz klasy Piosenka nie tworzysz obiektu klasy Piosenka, więc nie wywołujesz jego konstruktora.

To co robisz w metodzie odtworz klasy Piosenka:

1.) Tworzysz obiekt klasy Odtwarzacz (użyty konstruktor klasy Odtwarzacz)

2.) Wywołanie metody publicznej z klasy Odtwarzacz

 Jak napisałeś w pierwszym poście, konstruktor Piosenka nadaje wartość polu tytul. Może zostać wykorzystany w innej metodzie innej klasy np.

public class Main
{
...
    public static void main(String[] args)
    {
        // wywołanie konstruktora z klasy Piosenka
        Piosenka p  = new Piosenka("Despacito");  
        // wywołanie metody z klasy Piosenka
        p.odtworz();
    }
...

}

 

komentarz 15 grudnia 2017 przez rubesom Obywatel (1,690 p.)
Czyli w klasie "Odtwarzacz" musi być metoda o takiej samej nazwie ("odtworz") co w klasie "Piosenka".
komentarz 15 grudnia 2017 przez Aleksander Januszews Gaduła (3,790 p.)
Nie, każda z tych metod może mieć dowolną nazwę. Wydaje mi się, że nie do końca rozumiesz różnicę między klasą, a obiektem.
komentarz 15 grudnia 2017 przez rubesom Obywatel (1,690 p.)

Ale w tym przypadku:

odtwarzacz.odtworz(tytul);

wywoływana jest metoda "odtworz" z klasy "Odtwarzacz"?

komentarz 15 grudnia 2017 przez Aleksander Januszews Gaduła (3,790 p.)
Tak jest

Podobne pytania

0 głosów
1 odpowiedź 417 wizyt
0 głosów
1 odpowiedź 129 wizyt
0 głosów
1 odpowiedź 158 wizyt
pytanie zadane 20 listopada 2018 w Java przez geoinfo Nowicjusz (140 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...