web-dev-qa-db-fra.com

Peut-on créer une instance d'interface en Java?

Est-il possible de créer une instance d'une interface en Java?

Quelque part, j'ai lu qu'en utilisant une classe anonyme interne, nous pouvons le faire comme indiqué ci-dessous:

interface Test  
{  
    public void wish();  
}  
class Main  
{  
    public static void main(String[] args)  
    {  
        Test t=new Test()  
        {  
            public void wish()  
            {  
                System.out.println("output: hello how r u");  
            }  
        };  
    t.wish();  
    }  
}    

cmd> javac Main.Java  
cmd> Java Main  
output: hello how r u  

Est-ce correct ici?

71
Ninja

Oui, votre exemple est correct. Les classes anonymes peuvent implémenter des interfaces, et c'est la seule fois où je peux penser que vous verrez une classe implémenter une interface sans le mot-clé "implémente". Découvrez un autre exemple de code ici:

interface ProgrammerInterview  {
    public void read();
}

class Website  {
    ProgrammerInterview p = new ProgrammerInterview () {
        public void read() {
            System.out.println("interface ProgrammerInterview class implementer");
       }
     };
}

Cela fonctionne bien. A été pris de cette page:

http://www.programmerinterview.com/index.php/Java-questions/anonymous-class-interface/

48
Magnus

Vous ne pouvez jamais instancier une interface en Java. Vous pouvez toutefois faire référence à un objet qui implémente une interface en fonction du type de l'interface. Par exemple,

public interface A
{
}
public class B implements A
{
}

public static void main(String[] args)
{
    A test = new B();
    //A test = new A(); // wont compile
}

Ce que vous avez fait ci-dessus a été de créer une classe anonyme qui implémente l'interface. Vous créez un objet anonyme, pas un objet de type interface Test.

85
Chad La Guardia

Normalement, vous pouvez créer une référence pour une interface. Mais vous ne pouvez pas créer une instance pour l'interface.

5
Mooh

Réponse courte ... oui. Vous pouvez utiliser une classe anonyme lorsque vous initialisez une variable. Jetez un oeil à this

4
Liviu T.

Non, à mon avis, vous pouvez créer une variable de référence d'une interface, mais vous ne pouvez pas créer une instance d'une interface comme une classe abstraite.

3
Ketan G

Oui c'est correct. vous pouvez le faire avec une classe interne.

0
zinan.yumak

Oui, nous le pouvons, "Les classes anonymes vous permettent de rendre votre code plus concis. Elles vous permettent de déclarer et d’instancier une classe en même temps. C’est comme des classes locales sauf qu’elles n’ont pas de nom" - > > Java Doc

0
Veerendra