2017-02-14 1 views
1

J'ai un peu Confusion dans les codes below.in le premier code et l'interface est instancié et objet i est créé:Java: Interface instanciation avec et sans créer l'objet

Inter i=new Inter() { 

      @Override 
      public void work() {          //CODE:1 
       System.out.println("work work work work work work"); 

      } 
     }.work() ; //this won't worrk gives error:can't covert void to Inter 

Mais si j'instancier sans créer un objet tout fonctionne bien:

new Inter() { //no object created 

      @Override 
      public void work() {         //CODE:2 
       System.out.println("CODE2: work work work work"); 

      } 
     }.work();     //this is printing in the console 

quelqu'un peut me dire quelle est la raison pourquoi le code ne fonctionnera pas si l'objet i est créé?

+0

Vous ne pouvez pas affecter une variable à un appel de méthode 'void'. Qu'est-ce qui vous dérange? – shmosel

+0

@kanwal vérifier mes années –

+0

je l'ai eu .thanks. –

Répondre

1

L'implémentation ci-dessus ne fonctionnait pas parce que si vous regardez fermé l'erreur. Erreur était Type mismatch: cannot convert from void to Inter Vous appelez la méthode work() à la fin de sorte qu'il traite comme appel de méthode et votre work() a le type de retour void, de sorte qu'il génère une exception. Enlever l'appel de la chaîne de work() Cela fonctionnera pour vous.

Inter i=new Inter() { 

      @Override 
      public void work() {          //CODE:1 
       System.out.println("work work work work work work"); 

      } 
     }.work() ; //this won't worrk gives error:can't covert void to Inter 

Si vous changez le code ci-dessus avec au-dessous un, alors ça va fonctionner.

Inter i=new Inter() { 

       @Override 
       public void work() {          //CODE:1 
        System.out.println("work work work work work work"); 

       } 
      }; 
i.work(); 
+0

merci Maheshwar! apprécier ton aide. –

+0

pas de problème #readyaidera toujours –