В приведенном ниже коде мы можем доказать, что интерфейсы могут иметь статический класс и нестатический класс, объявленные внутри (статический вложенный класс и внутренний класс). Хорошо, ничего нового. Но в чем разница между «вложенными» и «внутренними» классами (внутри интерфейсов), если «внутренний» класс может иметь экземпляр без экземпляра внешнего класса, даже в интерфейсах Implemtations (MyInterfImpl в коде ниже) ?В чем разница между статическим классом, а не статическим классом внутри интерфейсов?
я прокомментировал линии на код, чтобы «изюминка»:
public class NewTest {
public static void main(String[] args) {
// OK Compilation Fail on next line, here we can't have an Instance of inner class because we don't have
// instance of outer class, nothing strange to me
MyClass.MyInner inner = new MyClass.MyInner(); //COMPILE FAIL: must be new MyClass().new MyInner() instead
MyClass.MyNested nested = new MyClass.MyNested(); // OK here, its nested
MyInterf.MyInner inner2 = new MyInterf.MyInner(); // HERE, MyInner is Inner class, ins't it?
MyInterf.MyNested nested2 = new MyInterf.MyNested(); // OK here, its nested
MyInterfImpl.MyInner inner3 = new MyInterfImpl.MyInner(); // // HERE, MyInner is Inner class, ins't it?
MyInterfImpl.MyNested nested3 = new MyInterfImpl.MyNested(); // // OK here, its nested
}
}
interface MyInterf{
public static class MyNested{
} // end
public class MyInner{
}//
// some abstract methods....
}
class MyClass{
public static class MyNested{
} // end
public class MyInner{
}// end
}
class MyInterfImpl implements MyInterf{
}
класс в интерфейсе ??? общие .. AFAIK, 'public' и' static' модификаторы являются излишними в интерфейсе –
Привет, я не уверен, правильно ли я понял ваш вопрос, поэтому, если не сообщите мне об этом. Генеральный контракт на использование статических методов не требует нового ключевого слова, предназначенного для создания экземпляров. , чтобы мы могли ожидать MyClass.MyInner(); для работы, но он также не будет компилироваться, так как MyInner не является статичным, а затем он должен быть доступен только с областью экземпляров, а затем он будет работать снова, используя: новый MyClass(). MyInner(); С другой стороны, новый MyInterf.MyNested() будет работать, поскольку интерфейсы объявляют вещи неявно статическими. (как сказал также Туфир) Надеюсь, что поможет –