Понимаю что 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
и имеет доступ ко всем его членам, в том числе и приватным.