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