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

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

这里是正确的吗?


答案 1

您永远无法在 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


答案 2

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