web-dev-qa-db-ja.com

Javaでインターフェイスのインスタンスを作成できますか?

Javaでインターフェイスのインスタンスを作成することはできますか?

匿名の内部クラスを使用して、次のように実行できることを読んだことがあります。

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  

ここで正しいですか?

71
Ninja

はい、あなたの例は正しいです。匿名クラスはインターフェイスを実装できますが、「implements」キーワードなしでインターフェイスを実装するクラスが表示されると思います。ここで別のコードサンプルを確認してください。

interface ProgrammerInterview  {
    public void read();
}

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

これは正常に機能します。このページから取られました:

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

48
Magnus

Javaでインターフェイスをインスタンス化することはできません。ただし、インターフェイスの種類によってインターフェイスを実装するオブジェクトを参照できます。例えば、

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

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

上記で行ったことは、インターフェースを実装する匿名クラスを作成することでした。タイプinterface Testのオブジェクトではなく、匿名オブジェクトを作成しています。

85
Chad La Guardia

通常、インターフェイスの参照を作成できます。ただし、インターフェイスのインスタンスを作成することはできません。

5
Mooh

短い答え...はい。変数を初期化するときに、匿名クラスを使用できます。 this を見てください

4
Liviu T.

いいえ、私の意見では、インターフェイスの参照変数を作成できますが、抽象クラスのようにインターフェイスのインスタンスを作成することはできません。

3
Ketan G

はい、正しいです。内部クラスでそれを行うことができます。

0
zinan.yumak

はい、できます。「匿名クラスを使用すると、コードをより簡潔にすることができます。クラスを宣言してインスタンス化することができます。名前がないことを除いて、ローカルクラスに似ています」- > > Java Doc

0
Veerendra