Объясните, пожалуйста, почему вот такой код компилируется
public class Solution{
public static void main(String[] args){
System.out.println(new KissMyShinyMetalAss());
}
public static class KissMyShinyMetalAss{
}
}
А вот этот не компилируется
public class Solution{
public static void main(String[] args){
System.out.println(new KissMyShinyMetalAss());
}
public class KissMyShinyMetalAss{
}
}
В одном случае внутренний класс объявлен как static в другом нет. Просто не могу понять как в данном случае это влияет на компиляцию и почему не позволяет создать new KissMyShinyMetalAss?
Ответ
Не-static nested class подразумевает работу внутри экземпляра другого (внешнего) класса и при создании получает экземпляр этого класса через конструктор, что позволяет обращаться к нему через (в данном случае) Solution.this. Вот и вся причина - в статическом контексте nested class не может получить экземпляр внешнего класса.
Комментариев нет:
Отправить комментарий