Понимаю что 100500 раз спрашиваю. Но как наследуются приватные методы, как это понимать нет своего метода getName(), свое приватное поле name же существует.
Почему при вызове System.out.println(super.name); выводится "The Darkside Hacker", разве не должно быть "Риша" ?
public class Solution {
private String name;
Solution(String name) {
this.name = name;
}
private String getName() {
return name;
}
private void sout() {
new Solution("The Darkside Hacker") {
void printName() {
System.out.println(getName());
}
}.printName();
}
public static void main(String[] args) {
new Solution("Риша").sout();
}
}
soutВы объявляете анонимный внутренний класс, являющийся наследником классаSolution. Затем Вы определяете в объявленном анонимном классе методprintName(), который выводит строку, полученную в результате вызова унаследованного методаgetName(). Во время выполнения, создаётся экземпляр этого класса, вызывая неявно определённый конструктор с аргументом в виде строки "The Darkside Hacker", который вызывает конструктор суперкласса, с тем же аргументом. После чего, у созданного экземпляра анонимного класса вызывается методprintName(). Заметьте, что указанный выше анонимный класс, определён в нестатическом методеsout, классаSolution, а значит является внутренним классом классаSolutionи имеет доступ ко всем его членам, в том числе и приватным.