Spring - po co puste konstruktory oraz super(); this();?

0

Cześć.
Zastanawiam się czemu w Springu MVC piszemy puste konstruktory w stylu

public Klasa() { }

lub stosujemy tam super(); <- to woła nam konstruktor parenta - czyli jaki tak naprawdę?
lub też this(); <- co z kolei woła konstruktor danej klasy (ale który? co jeśli mam kilka? chodzi o ten defaultowy?)

Kiedyś szukałem odpowiedzi na ten temat i nie wiem nic więcej poza tym, że framework tego wymaga przy skanowaniu komponentów.

Co jeśli mam coś takiego:

	public Customer(){
		super(); //jaki konstruktor jest wołany?
		this.address = new Address();
	}

	public Customer(String id, String name){
		this(); // czy ten this() woła ten konstruktor powyżej?
		this.address = new Address();
	}

Spotykam się z tym w książkach i w kursach, ale nikt tego nie tłumaczy, chciałbym to sobie utrwalić i pojąć, bo wiadomo że nie będę zawsze przeklepywał tutków.

Z góry dziękuję!

0

super nie jest potrzebny, bo kompilator sam go doda, bo w tym przypadku niejawnie dziedziczysz z Object i zostanie wywołany konstruktor Object(). this() oznacza wywołanie konstruktora bezparametrowego, czyli odpowiedź brzmi tak konstruktor wyżej zostanie wywołany. Jeżeli nie masz konstruktora bezparametrowego to walnie błędem.

0

Dzięki. Teraz wszystko zaczyna mi się układać.

0

super() wywołuje konstruktor klasy nadrzędnej, (jeśli nie jest jawnie podana to będzie to klasa Object()) jak na przykładzie:

public class Employee{
	public Employee(){
	}
}

public class Manager extends Employee{
	public Manager(){
		super(); // wywoła konstruktor klasy nadrzędnej (Employee())
	}
}

natomiast this() użyty w konstruktorze wywoła inny konstruktor tej klasy:

public Customer(){
}
 
public Customer(String id){
    this(); // wywoła konstruktor powyższy (bezargumentowy)   
}

public Customer(String id, String name){
    this(id); // wywoła konstruktor powyższy (jedno argumentowy)
}

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