2016-10-08 4 views
1

В книге «Java OCP 8 Программист Учебное пособие II», он сказал, чтоАнонимный внутренний класс на уровне члена

анонимный внутренний класс является локальным внутренним классом

и

локальный внутренний класс является вложенной класс, определенный в методе

Однако, я могу определить анонимный внутренний класс вне метода:

public class Outer { 
    Foo ex = new Foo { 
     @Override 
     public void bar() { 
     System.out.println("This is my bar implementation"); 
     } 
    } 
} 

void TestClass { 
    public static void main(String[] args) { 
    Outer outer = new Outer(); 
    outer.ex.bar(); 
    } 
} 

книга неправильно сказать, что анонимный внутренний класс является локальным внутренним классом, поскольку он не должен быть локальным (в рамках метода) или в качестве примера я предоставил не анонимный внутренний класс (так как он назначен именованной переменной)?

Благодаря

+0

* " анонимный внутренний класс - это локальный внутренний класс "* ... акцент на * локальный *. Выражение анонимного класса действительно похоже на внутренний класс, если оно определено в нестационарном контексте, потому что, подобно экземпляру внутреннего класса, его экземпляры содержат ссылку на экземпляр-экземпляр. Однако, если он определен в статическом контексте, выражение анонимного класса отличается от внутреннего класса, потому что его экземпляры не содержат ссылки на экземпляр-экземпляр. Вложенные экземпляры внутреннего класса всегда должны иметь закрытый экземпляр. Это не относится ни к локальным, ни к анонимным классам. – scottb

+0

Если в книге говорится, что это неправильно. Анонимный внутренний класс - это определение и реализация какого-либо типа. –

ответ

0

ex не локальный класс. все, что локальный класс не может быть анонимным, и наоборот (в меру моих знаний)

Цитируя Oracle's Java OO tutorial on Anonymous Classes:

Анонимные классы позволяют сделать код более кратким. Они позволяют вам объявлять и создавать экземпляр класса одновременно. Они похожи на локальные классы, за исключением того, что у них нет имени. Используйте их, если вам нужно использовать локальный класс только один раз.

пару строк ниже ..

Хотя местные классы объявления классов, анонимные классы выражения, что означает, что вы определяете класс в другом выражении

Смежные вопросы