81

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

ここで正しいですか?

4

7 に答える 7

94

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
}

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

于 2011-01-03T19:05:54.920 に答える
58

はい、あなたの例は正しいです。匿名クラスはインターフェイスを実装できます。「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/

于 2013-05-01T23:19:40.013 に答える
6

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

于 2011-01-03T19:08:14.003 に答える
4

短い答え...はい。変数を初期化するときに匿名クラスを使用できます。この質問を見てください:匿名 vs 名前付き内部クラス? - ベストプラクティス?

于 2011-01-03T19:05:43.907 に答える
0

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

于 2014-12-23T19:38:40.960 に答える
0

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

于 2011-01-03T19:06:45.587 に答える