У меня есть несколько случаев, о которых мне интересно. Во-первых, если у вас нет конструктора:
class NoCons { int x; }
Когда я делаю new NoCons()
, вызывается конструктор по умолчанию. Что он делает точно? Установил ли он x
значение 0, или это происходит в другом месте?
Что делать, если у меня есть такая ситуация:
class NoCons2 extends NoCons { int y; }
Что происходит, когда я звоню new NoCons2()
? Создается конструктор по умолчанию NoCons
по умолчанию, а затем конструктор NoCons2
? Каждый из них устанавливает соответствующие поля x
и y
в 0?
Как насчет этой версии:
class Cons2 extends NoCons { int y; public Cons2() {} }
Теперь у меня есть конструктор, но он не вызывает конструктор суперкласса. Как x
когда-либо инициализируется? Что, если бы у меня была такая ситуация:
class Cons { int x; public Cons() {} }
class NoCons2 extends Cons { int y; }
Будет ли вызываться конструктор Cons
?
Я мог бы просто попробовать все эти примеры, но я не могу сказать, когда запускается конструктор по умолчанию. Какой общий способ подумать об этом, чтобы я знал, что произойдет в будущих ситуациях?