В чем разница между этими двумя объявлениями внутреннего класса? Также прокомментируйте преимущества/недостатки?
случай A: класс внутри класса.
public class Levels {
static public class Items {
public String value;
public String path;
public String getValue() {
return value;}
}
}
и случай B: класс внутри интерфейса.
public interface Levels{
public class Items {
public String value;
public String path;
public String getValue() {
return value;}
}
}
Внесено исправление: к размещению метода getvalue.
дополнительная информация: я могу создать экземпляр класса Items в обоих случаях A и B в другом классе, который ВООБЩЕ не реализует интерфейс.
public class Z{//NOTE: NO INTERFACE IMPLEMENTED here!!!!
Levels.Items items = new Levels.Items();
}
Поскольку интерфейс не создается, все элементы внутри интерфейса доступны с помощью точечной нотации без создания экземпляра интерфейса LEVELS просто потому, что вы не можете создать экземпляр интерфейса, что фактически делает класс, определенный внутри интерфейса, проницаемым для статической ссылки.
Поэтому говорить, что класс Items в случае B не является статическим, не имеет смысла. Поскольку оба случая A и B создаются одинаково, я не ищу семантику того, что является статическим, внутренним или вложенным. Хватит давать мне ответы по семантике. Мне нужны компилятор, время выполнения и поведенческие различия/преимущества, или, если нет, то так и скажите. Больше никаких ответов по семантике, пожалуйста!!!!! Эксперт по внутренностям спецификаций JVM или .NET VM, пожалуйста, ответьте на этот вопрос, а не на семантику учебника.