class superclass {
superclass() {
show();
}
void show() {
System.out.println("three");
}
}
class subclass extends superclass {
int x=3;
void show() {
System.out.println(x);
}
public static void main(String ar[]) {
subclass s=new subclass();
}
}
Выход: 0
По моему мнению: сначала выполняется конструктор подкласса, который затем вызывает конструктор суперкласса. Это означает, что в первую очередь должен выполниться метод show()
суперкласса и вывести three
, но этого не происходит. Почему?
s
—subclass
, поэтому конструкторsuperclass
вызывает методshow
классаsubclass
. 02.07.2015s.show()
, то я могу понять почему идет подклассshow()
, но вот какая связь между типомs
и конструкторомsuperclass
02.07.2015s
, этоsubclass
. Для этого класса нет явного конструктора, поэтому компилятор Java создает неявный конструктор по умолчанию. Конструктор по умолчанию вызывает конструктор суперкласса без аргументов, который здесьsuperclass()
. Ваш конструкторsuperclass()
явно вызываетshow()
. 02.07.2015s
относится к типуsubclass
, поэтому он вызываетsubclass
show
. Хорошо, но проблема остается той же, если я напишуsuperclass s=new subclass()
. теперьs
является типомsuperclass
, но вывод остается таким же 02.07.2015new subclass()
?? 02.07.2015