interface A{
public abstract void method();
}
interface B{
public abstract void method();
}
class C implements A,B{
public void method(){}
public static void main(String args[]){
C ob=new C();
ob.method();
System.out.println("");
}
}
在这种情况下,方法()被调用哪个接口。
答案 0 :(得分:1)
C obj = new C();
将调用 C
方法
因为它是C
的实例
注意:界面没有实现(至少在本例中)
答案 1 :(得分:1)
都不是。接口不提供实现。调用的方法将在C
中声明和实现。
答案 2 :(得分:1)
实际上这无关紧要(接口包含方法定义)事实是运行时它会调用class C
' s method
声明(obj.method()
)。
答案 3 :(得分:0)
在界面中定义方法时,您不提供方法体。您只需定义所有实施者必须遵循的原型和合同。这允许编译器知道如果Object实现接口,它必须具有这些方法。由于您没有在两个接口中创建方法体,因此只有一个方法可以在C类中找到。
对于Java 1.8,这不适用于您可以在接口中提供方法的默认实现。现在,您可以在已发布的示例中使用类似的案例,其中实现了两个具有冲突方法体的接口。我说可以,因为设计师预见到这一点,如果你没有明确地覆盖冲突的默认方法,这是一个编译器错误。
示例:强>
public class Main {
public static interface A {
default public int get() {
return 0;
}
}
public static interface B {
default public int get() {
return 1;
}
}
public static class C implements A, B {
public int get() {
return B.super.get();
}
}
public static void main( String[] args ) throws Throwable {
System.out.println( new C().get() );
}
}
答案 4 :(得分:0)
这是类型的多重继承的一个例子,它意味着你的类C和用于A或B引用。(这不是行为/方法的多重继承或状态的多重继承),有Java中没有状态的多重继承
所以你需要提供这个方法的显式实现来实现联系,记住接口是一个契约,你的类应该实现那个完全合同(这里没有方法的继承)。 / p>
但是在Java 8中,您可以通过在接口中提供默认实现来行为/方法的多重继承,因此,如果是这种情况,则需要提供明确的在C类上实现,您可以将调用委托给其中一种类型。例如:
// delegate the call to A method implementation, Java 8
@Override
public void method() {
A.super.method()
}