Konstruktor bezargumentowy

0

Cytat z książki:

Wiele klas zawiera konstruktor bezargumentowy tworzący obiekty o określonym domyślnym
stanie początkowym. Poniżej znajduje się przykładowy konstruktor domyślny klasy Employee:
public Employee()

{
name = "";
salary = 0;
hireDay = new Date();
}

Konstruktor domyślny jest stosowany, w przypadku gdy programista nie utworzy żadnego
konstruktora. Konstruktor ten ustawia wszystkie pola na wartości domyślne. W związku
z tym wszystkie dane liczbowe będące składowymi obiektu miałyby wartość 0, wartości
logiczne byłyby ustawione na false, a zmienne obiektowe na null.
Jeśli klasa ma przynajmniej jeden konstruktor, ale nie ma konstruktora domyślnego, nie można
tworzyć jej obiektów bez podania odpowiednich parametrów konstrukcyjnych.

Pytanie:
Coś mi tutaj nie pasuje w tym tłumaczeniu. Najpierw pisze że stosowany jest konstruktor
domyślny gdy programista nie utworzy żadnego konstruktora. - Ja to rozumie tak że jeśli w
danej klasie sa zdefiniowane pola klasy ale klasa nie zawiera żadnego konstruktora maszyna wirtualna
stosuje domyślny konstruktor i uzupełnia zmienne wartościami domyślnymi.
Później piszą że jak klasa ma przynajmniej jeden konstruktor ale nie ma domyślnego to nie można
tworzyć jej obiektów bez podania odpowiednich parametrów konstrukcyjnych. Przeciez wcześniej
pisano że domyślny konstruktor stosujemy gdy nie ma żadnego innego konstruktora.

Nie zbyt jasno to napisali kiedy w końcu stosowany jest dany konstruktor. Ponadto w innym kursie
znalazłem taką treść:

Każda klasa posiada domyślnie jeden niejawny konstruktor (bez parametrów). Jeżeli jednak 
zdefiniujesz w swojej klasie chociaż jeden konstruktor przyjmujący dowolne argumenty, to 
konstruktor domyślny przestaje istnieć.

Jedno z drugim sie wyklucza. Może ktoś napisze jak to faktycznie jest bo ja nie mogę
z tego wywnioskować, bo widzę sprzeczności.

0

tak ta książka jest jakaś skomplikowana.

możesz bez problemu sobie zrobić klasę Employee

class Employee {
        
        private String name;
        
        private Integer salary;
        
        private Date hireDay;
        
        private boolean isWorking;

        @Override
        public String toString() {
            return "Employee{" +
                    "name='" + name + '\'' +
                    ", salary=" + salary +
                    ", hireDay=" + hireDay +
                    ", isWorking=" + isWorking +
                    '}';
        }
    }

a potem<ort> weś</ort>

	public static void main (String[] args) 
	{
		Employee e = new Employee();
		System.out.println(e);
	}

zobacz sobie co domyślnie java tam ustawiła. jeszcze stestuj sobie małego inta

0

Jeśli programista w definicji klasy nie napisze żadnego konstruktora, to kompilator w jego imieniu napisze konstruktor domyślny.
A to zdanie:

Jeśli klasa ma przynajmniej jeden konstruktor, ale nie ma konstruktora domyślnego, nie można
tworzyć jej obiektów bez podania odpowiednich parametrów konstrukcyjnych.
jest nieprawdziwe.

0

bogdans takie zdanie pisze w książce, która jest podobno dobra książką i polecaną do nauki programowania.

0
public class A
{
    private int x = 5;
    public static void main(String[] args)
    {
        new A();
    }
    public A()
    {
        x = 6;    
    }
}

W klasie A nie ma konstruktora domyślnego (bo jest napisany przeze mnie konstruktor). I jak widać, można tworzyć obiekty bez podanie parametrów.
Zajrzyj też tu http://ideone.com/un31Ie.
Zdanie

Konstruktor domyślny jest stosowany, w przypadku gdy programista nie utworzy żadnego
konstruktora. Konstruktor ten ustawia wszystkie pola na wartości domyślne. W związku
z tym wszystkie dane liczbowe będące składowymi obiektu miałyby wartość 0, wartości
logiczne byłyby ustawione na false, a zmienne obiektowe na null.
też jest nieprawdziwe.

0

A co to jest za książka ziom?

0

A mi sie wydaje że coś pokręcili w tej książce. Ja to po przeczytaniu kilku tekstów na ten temat rozumie tak.
Programista nie napisał żadnego konstruktora w klasie, kompilator tworzy domyślny konstruktor i nadaje domyślne wartości.
Programista napisał konstruktor bezargumentowy i bloku jego określił sposób inicjacji pól klasy, zawsze takimi samymi wartościomi.
Programista napisał konstruktor z argumentami i przy tworzeniu obiektu podajemy parametry.

Dobrze rozumiem???

==========
I moja prośba:
Jeśli zadaje pytanie o wyjaśnienie czegos jak to jest: tak czy owak , wystarczy napisać słownie odpowiedź bez przykładów kodów, są one zbędne a ja potrzebuje tylko odpowiedzi słownej .

0

Dostałeś odpowiedź bez kodu, to ją kwestionowałeś, więc się podparłem kodem. Poza tym, nie jesteś na indywidualnych konsultacjach tylko na forum. Kody mogą się przydać innym czytającym. Jak Cię rozpraszają, to przylep kartkę do monitora.

Programista nie napisał żadnego konstruktora w klasie kompilator tworzy domyślny konstruktor i nadaje domyślne wartości.

Niezupełnie, programista mógł nie napisać żadnego konstruktora, ale nadać wartości w deklaracji pól.

class B
{
     private int x = 666;
}
0

No tak tylko że my tutaj rozmawiamy na temat konstruktorów, więc tą kwestię pominołem.

A mi sie wydaje że coś pokręcili w tej książce. Ja to po przeczytaniu kilku tekstów na ten temat rozumie tak.
Programista nie napisał żadnego konstruktora w klasie (a w klasie są zdeklarowane jakieś pola), kompilator tworzy domyślny konstruktor i nadaje domyślne wartości.
Programista napisał konstruktor bezargumentowy i w bloku jego określił sposób inicjacji pól klasy, zawsze takimi samymi wartościami.
Programista napisał konstruktor z argumentami i przy tworzeniu obiektu podajemy parametry.

Czyli jak dobrze rozumieM ??

0

Nie, przeczytaj wielokrotnie i ze zrozumieniem mój poprzedni post.

0

Konkretnie mi napisz czarno na białym, bo juz jest takie zamieszanie że już nie wiem o co chodzi dokładnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1