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

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

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

Kopiuj
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:

Kopiuj
	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ę!

Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:22 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
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.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
0

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

MJ
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:1
0

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

Kopiuj
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:

Kopiuj
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)
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.