2016-04-13 2 views
2
interface Example{ 
    void methodExample(); 
} 
class Y{ 
    void do(Example x) { } 
} 

class X{ 
    void methodX() { 
    Y y = new Y(); 
    y.do(new Example() { 
     public void methodExample() { 
     System.out.println("methodExample"); 
     } 
    }); 
    } 
} 

Я хочу создать основной класс и позвонить methodExample. Как мне это сделать?Вызов метода в анонимных (внутренних) классах

+2

Несвязанный, но примечательный: '' 'do''' не является допустимым идентификатором, потому что это также ключевое слово. –

ответ

3

Поскольку ваш класс реализует Example интерфейс, а потому void methodExample() присутствует на этом интерфейсе, все, что вам нужно сделать, это ссылаться на объект его интерфейса, и вызвать его метод:

class Y{ 
    public void doIt(Example x) { 
     x.methodExample(); 
    } 
} 

Вышеуказанные работы, потому что объекты всех классов, реализующих Example, включая все анонимные реализации, известны во время компиляции для реализации methodExample().

1

Если у вас нет доступа к классу Y тогда, единственный способ сделать это, чтобы переопределить doIt() себя первый, используя анонимный внутренний класс, а затем вызвать перекрытый метод, например:

class X { 
    void methodX() { 
     Y y = new Y() { 
      @Override 
      void doIt(Example x) { 
       x.methodExample(); 
      } 
     }; 
     y.doIt(new Example() { 
      public void methodExample() { 
       System.out.println("methodExample"); 
      } 
     }); 
    } 
} 

Для позвоните, вы можете просто:

public static void main(String[] args) throws Exception { 
    X x = new X(); 
    x.methodX(); 
} 
Смежные вопросы