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и конструкторомsuperclass02.07.2015s, этоsubclass. Для этого класса нет явного конструктора, поэтому компилятор Java создает неявный конструктор по умолчанию. Конструктор по умолчанию вызывает конструктор суперкласса без аргументов, который здесьsuperclass(). Ваш конструкторsuperclass()явно вызываетshow(). 02.07.2015sотносится к типуsubclass, поэтому он вызываетsubclassshow. Хорошо, но проблема остается той же, если я напишуsuperclass s=new subclass(). теперьsявляется типомsuperclass, но вывод остается таким же 02.07.2015new subclass()?? 02.07.2015