实例化接口

时间:2012-08-02 05:35:03

标签: java interface

假设我有一个方法I

的界面doIt();

现在我有一个实现C的课程I,因此提供了doIt();的实施

对于类Hello

中的以下代码
public class Hello{
    I i = new I();
    i.doIt();
}

1。)现在从哪里执行doIt()?

2。)如果还有另一个类HelloWorld实现了I,并且对doIt()函数执行了不同的操作,该怎么办?那么它将采取哪种实施方式?

6 个答案:

答案 0 :(得分:4)

尝试编译这些东西。您只能实例化Class来实现Interface而不是Interface

Interface就像Classimplements时同意的合约;并且在Interface的协议范围内,Class提供了它的实现。

答案 1 :(得分:2)

您无法实例化界面。您只能实例化一个具体的类。 doIt()的实现是在实例化的具体类中定义的实现。如果该类没有提供实现,那么它将从超类继承。

作为旁注,在您的代码示例中,您在类中没有包含在方法或静态块中的代码。这不合法。您必须将代码括在方法或静态块中。

答案 2 :(得分:2)

无法实例化接口。您发布的代码无法编译。你能做的就是这样:I c = new C();。这也将确保我调用doIt()的适当实现。

有关Interfaces的更多信息,请参阅this Oracle教程。

答案 3 :(得分:2)

这将永远不会起作用

public class Hello{
    I i = new I(); // I is an interface, can't be instantiated
    i.doIt();
}

我想你想......

public class A implements I {
    public void doIt() {

        System.out.println("A did it");

    }
}
public class B implements I {
    public void doIt() {

        System.out.println("B did it");

    }
}

public class Main {
    public static void main(String args[]) {
        I i = new A();
        i.doIt();
        i = new B();
        i.doIt();
    }
}

这将输出

A did it
B did it

答案 4 :(得分:0)

没有实现,您的代码将无法编译。尝试创建一个简单的工作示例,您将理解。顺便说一句,语法错误:如果我是一个接口,你需要打开花括号来创建一个实现接口的匿名类:

I i = new I() { public void doIt() {} };

答案 5 :(得分:0)

在您的代码中I i = new I(); 不正确,因为Iinterface,界面不能实例化,如果您必须这样做应该是

I i = new I(){
   public returntype doIt(){
    ...
   }
};

现在上面的实现被称为匿名内部类 here