class Alpha
{
String name = "Alpha";
Alpha()
{
print();
}
void print()
{
System.out.println("Alpha Constructor");
}
}
class Beta extends Alpha
{
int i = 5;
String name = "Beta";
public static void main(String[] args)
{
Alpha a = new Beta();
a.print();//Line1 executes Beta constructor
System.out.println(a.name);//Line 2 displays Alpha instance variable
}
void print()
{
System.out.println(i);
}
}
Эта программа успешно компилируется и отображает следующий результат.Конструктор - исполнительный код
0
5
Alpha
Вопросы
а) Я не понимаю, почему конструктор Альфов не получил казнен первым.
Я считаю, что «super()» будет называться неявно каждым дочерним конструктором первым ... right?.
b) Если конструктор Beta уже выполнен, то почему напечатан «5»? (Вторая строка в выводе)
Третья линию я вроде понимаю (т.е. собственные переменная Альфа будет отображаться, поскольку литье еще не сделана на «а» переменный экземпляр)
Откуда взялось это '0'? м? –
'0' - результат первого запуска' print', где 'i' еще не отменено. Оба конструктора называют 'print', но в то время, когда' Alpha'constructor вызывает 'print''i', инициализатор экземпляра еще не инициализирован. – Sebastian