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 对象,而不是 type 的对象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

简短的回答......是的。初始化变量时可以使用匿名类。看看这个问题:匿名与命名内部类?- 最佳实践?

于 2011-01-03T19:05:43.907 回答
3

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

于 2015-04-25T05:52:11.917 回答
0

是的,它是正确的。你可以用一个内部类来做到这一点。

于 2011-01-03T19:06:45.587 回答
0

是的,我们可以,“匿名类使您能够使您的代码更简洁。它们使您能够同时声明和实例化一个类。它们就像本地类,只是它们没有名称”- >>Java Doc

于 2014-12-23T19:38:40.960 回答