我可以为接口创建一个对象吗?

2022-09-04 05:10:29

是否可以为接口创建对象?如果是,如何完成?根据我的观点,下面的代码说我们可以:

Runnable r = new Runnable() {
    // some implementation
}

答案 1

这不是在创建 Interface 的实例,而是在创建一个实现接口的类。所以当你写:

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        // TODO Auto-generated method stub

    }
};

您实际上是在创建一个实现 Runnable 接口的类。您需要遵循此处的所有规则,在这里,我们正在重写 的run方法。抽象类也有类似的东西。我们可以用一个例子来测试:Runnable

public abstract class AbstractClass {
    public void someMethod() {
        System.out.println("abstract class");
    }
}

和另一个类,即:TestClass

public class TestClass {
    public static void main(String[] args) {
        AbstractClass abstractClass = new AbstractClass() {
            public void someMethod() {
                System.out.println("concrete class method");
            }
        };
        abstractClass.someMethod();
    }
}

这将创建我们正在覆盖的子类的实例;此程序打印:someMethod()

concrete class method

这证明我们正在创建子类的实例。


答案 2

您无法直接实例化接口,但可以实例化实现该接口的类:

public class RunClass implements Runnable {
    // Class implementation
}

Runnable r = new RunClass();

这与您正在内联执行的操作基本相同。new Runnable() 后面的括号将包含内联实现。