我们可以在Java中创建一个接口实例吗?

Nin*_*nja 72 java interface instance anonymous-class inner-classes

是否可以在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  
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?

Cha*_*dia 88

你永远不能在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
}
Run Code Online (Sandbox Code Playgroud)

你上面做的是创建一个实现接口的Anonymous类.您正在创建一个Anonymous对象,而不是类型的对象interface Test.

  • 匿名类没有名称....匿名 (12认同)
  • 这个例子有效......但不像他认为的那样.了解代码实际执行的内容非常重要.如果代码与他认为的不同,我不会称之为"正确". (4认同)
  • 如果您查看上述注释之一,您将看到语法需要`interface-name`,以便编译器知道自治对象实现接口.它只是语言语法的一部分. (2认同)

小智 49

是的,你的例子是正确的.匿名类可以实现接口,这是我唯一能想到的,你会看到一个实现没有"implements"关键字的接口的类.在这里查看另一个代码示例:

interface ProgrammerInterview  {
    public void read();
}

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

这很好用.取自此页面:

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

  • 在上面的例子中,我们没有实例化ProgrammerInterview的对象,但我们所做的是使用ProgrammerInterview创建引用,然后创建了一个匿名类的对象。这个匿名类实现了 ProgrammerInterview 并一次性创建了匿名类的对象。 (2认同)
  • 但是你不是在调用`new ProgrammerInterview(){...`?所以从技术上讲,你正在制作一个界面实例.我对这里发生的事情仍然有点困惑. (2认同)

Moo*_*ooh 5

通常,您可以为接口创建参考。但是您不能为接口创建实例。