2013-05-21 5 views
-1
public SampleBehaviour otherway(final String st) { 
    return new SampleBehaviour() { 
     private String str = st; 

     @Override 
     public void print() { 
      System.out.println("val:"+val); 
     } 

    }; 
} 

SampleBehaviour - это интерфейс.Использование анонимного внутреннего класса в java

Классы, которые реализуют интерфейс, должны определять поведение методов, каковы использование некоторых переменных в интерфейсе?

Почему параметр метода должен быть окончательным? Я не получаю приложение реального времени для такого использования? Что за это стоит?

Если это полезно, почему C++ не имеет что-то вроде этого?

+2

* если это полезно, почему у нас C++ нет чего-то подобного? *, Потому что это не так, как был разработан язык. –

+0

. На ваш вопрос анонимным классам не разрешается изменять ссылку параметров метода, поэтому они должны быть помечены как «final» для использования в анонимном классе. –

+0

@ LuiggiMendoza почему он не должен изменять? – Dineshkumar

ответ

0

От The Java Language Specification, раздел 8.1.3:

Любая локальная переменная, формальный параметр, или параметр исключения используется, но не объявлен во внутреннем классе должен быть объявлен окончательным.

Wikipedia говорит, что для внутреннего класса необходимо сохранить свою собственную копию переменной, так как она может жить после того, как внешний класс выходит из сферы действия; для предотвращения того, чтобы одно и то же имя переменной ссылалось на два разных местоположения, они вынудили переменную зафиксировать на месте.