java rookie - pytanie o konstruktor i JVM

0

Cześć wszytkim,

Dawno się nie udzielałem na forum, więc może krótki update: zmieniam pracę! :)
Ostatnio byłem na rozmowie kwalifikacyjnej i miałem pytanie dotyczące konstruktora. Otóż jak wiadomo, jeśli mamy "pustą" klasę, bez konstruktora to JVM/kompilator doda domyślnie konstruktor bezargumentowy. Pytanie dostałem takie: "jeśli mamy klasę z kilkoma konstruktorami z argumentami, to czy JVM doda domyślnie konstruktor bezargumentowy, czy nie?"
Moja odpowiedź była, że konstruktor zostanie dodany, natomiast mój adwersarz stwierdził, że jestem w błędzie i że klasa się nie skompiluje.

Wróciłem do domu trochę skonfundowany i sprawdziłem sobie na prostej klasie i wszystko się ładnie skompilowało i zadziałało.

Tutaj moje pytanie: jakie trzeba spełnić warunki, żeby klasa bez bezargumentowego konstruktora (ale z konstruktorami z argumentami) się nie skompilowała? Jest coś takiego?

Pozdrawiam,
t

1

Podasz kod, bo to nie działa i ziomek miał rację.
http://ideone.com/YwUMbs

0

No ale OP chyba nie mówił, że koleś próbował tworzyć obiekt tej klasy domyślnym konstruktorem, tylko, że jest błąd w samej klasie. O takim przypadku jak podałeś też pomyślałem ale to chyba nie o to chodzi.

1

Klasa się skompiluje, bo nie ma powodu żeby nie miała. Jedyne co to nie będzie miała bezargumentowego konstruktora

3

Domyślny konstruktor jest dodawany tylko i wyłącznie wtedy, gdy nie ma żadnego innego.
Analogicznie, jeśli w konstruktorze klasy dziedziczącej pierwszą instrukcją nie jest super(argumenty) to kompilator dopisuje domyślnie na początku super(). Przykład:

	class A { A(int a) {} }
	class B extends A { }

Wynik kompilacji:

Main.java:13: error: constructor A in class Ideone.A cannot be applied to given types;
	class B extends A { }
	^
  required: int
  found: no arguments
  reason: actual and formal argument lists differ in length
1 error

Rozwiązaniem jest dodanie jawnego konstruktora z jawnym super:

	class A { A(int a) {} }
	class B extends A { B() { super(5); } }
0

@RewAnd:
Nie mam kodu, sorry. Widocznie o to mu chodziło. :D
Zapomina się jak działa Java, jak ma się IDE które robi połowę roboty
Takie to chciwe i podchwytliwe :D

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