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

时间:2011-01-03 19:02:32

标签: java interface instance inner-classes anonymous-class

是否可以在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  

这里是否正确?

7 个答案:

答案 0 :(得分:84)

您永远无法在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类型的对象。

答案 1 :(得分:46)

是的,你的例子是正确的。匿名类可以实现接口,这是我唯一能想到的,你会看到一个实现没有“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/

答案 2 :(得分:5)

Normaly,您可以为界面创建参考。但是你无法为接口创建一个实例。

答案 3 :(得分:4)

简短回答......是的。初始化变量时,可以使用匿名类。 看看this

答案 4 :(得分:3)

在我看来,你可以创建一个接口的引用变量,但是你不能像抽象类那样创建一个接口实例。

答案 5 :(得分:0)

是的,这是对的。你可以用内部的课来做。

答案 6 :(得分:0)

是的,我们可以,“匿名类使您能够使您的代码更简洁。它们使您能够同时声明和实例化类。它们就像本地类,除了它们没有名称” - {{ 3}}