假设我有一个方法I
doIt();
现在我有一个实现C
的课程I
,因此提供了doIt();
的实施
对于类Hello
public class Hello{
I i = new I();
i.doIt();
}
1。)现在从哪里执行doIt()?
2。)如果还有另一个类HelloWorld
实现了I
,并且对doIt()
函数执行了不同的操作,该怎么办?那么它将采取哪种实施方式?
答案 0 :(得分:4)
尝试编译这些东西。您只能实例化Class
来实现Interface
而不是Interface
。
Interface
就像Class
在implements
时同意的合约;并且在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();
不正确,因为I
是interface
,界面不能实例化,如果您必须这样做应该是
I i = new I(){
public returntype doIt(){
...
}
};
现在上面的实现被称为匿名内部类 here