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
ここで正しいですか?
はい、あなたの例は正しいです。匿名クラスはインターフェイスを実装できますが、「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/
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
のオブジェクトではなく、匿名オブジェクトを作成しています。
通常、インターフェイスの参照を作成できます。ただし、インターフェイスのインスタンスを作成することはできません。
短い答え...はい。変数を初期化するときに、匿名クラスを使用できます。 this を見てください
いいえ、私の意見では、インターフェイスの参照変数を作成できますが、抽象クラスのようにインターフェイスのインスタンスを作成することはできません。
はい、正しいです。内部クラスでそれを行うことができます。
はい、できます。「匿名クラスを使用すると、コードをより簡潔にすることができます。クラスを宣言してインスタンス化することができます。名前がないことを除いて、ローカルクラスに似ています」- > > Java Doc