2013-06-02 2 views
7

Как этот код работает я м полностью озадачен ....Как мы можем создать объект интерфейса в java?

package com.servletpack.examples; 

interface check { 
    public void message(); 
} 
public class Interface { 
    public static void main(String[] args) { 
     try { 
      check t = new check() {//how???????????????? 
       public void message() { 
        System.out.println("Method defined in the interface"); 
       } 
      }; 
      t.message(); 
     } catch (Exception ex) { 
      System.out.println("" + ex.getMessage()); 
     } 
    } 
} 
+2

Вы попробовали [googling] (https://www.google.co.il/search?q=How+can+we+create+object+of+interface+in+java%3F&rlz=1C1CHEU_iwIL474IL474&oq=How+ can + we + create + object + of + interface + in + java% 3F & aqs = chrome.0.57j60l2j0l3.802j0 & sourceid = chrome & ie = UTF-8) it? – BobTheBuilder

+0

Пробовали ли вы google вещи и чтобы увидеть основы JAVA? ссылайтесь на эту ссылку http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html –

ответ

18

С этим синтаксисом вы создаете anonymous class, что совершенно законно.

Внутренние анонимные классы скомпилированы в собственный класс, называемый EnclosingClass$n, где заголовок закрывающего класса предшествует знаку $. и n увеличивается для каждого дополнительного анонимного класса. Это означает, что следующий класс создается:

class Interface$1 implements check { 
    public void message() { 
     System.out.println("Method defined in the interface"); 
    } 
} 

Затем код в main компилирует внутренне использовать вновь определенный анонимный класс:

check t = new Interface$1(); 
t.message(); 
+0

Что делать, если интерфейс $ 1 является абстрактным классом? –

+1

@RamaKrishna Анонимные классы не могут быть абстрактными. Если интерфейс 'check' был вместо абстрактного класса, это анонимная реализация аналогично была бы названа' Interface $ 1'. – Vulcan

5

Вы создаете экземпляр (на лета) в anonymous class, который реализует проверку интерфейса.

2

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

2

Это анонимный класс. Ваш check класс - это интерфейс. Анонимный класс определяет реализацию данного интерфейса «на лету». Таким образом, это избавляет вас от создания отдельного класса для реализации интерфейса. Этот подход полезен только тогда, когда вы знаете, что никогда не потребуете этой реализации в любом месте кода.

Надеюсь, это объяснение поможет!

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